«c-preprocessor» 태그된 질문

C 및 C ++ 언어 프로그램을 컴파일하기 전에 텍스트 매크로 프로세서가 적용되었습니다. 이 태그는 Objective-C 또는 C #의 #directives와 같이 동일한 기능을 가진 다른 컴파일러 / 언어에 대한 질문에도 사용할 수 있습니다.

8
인수 수에 대한 매크로 오버로드
나는 두 매크로가 FOO2와를 FOO3: #define FOO2(x,y) ... #define FOO3(x,y,z) ... FOO다음과 같이 새 매크로를 정의하고 싶습니다 . #define FOO(x,y) FOO2(x,y) #define FOO(x,y,z) FOO3(x,y,z) 그러나 매크로는 여러 인수에 과부하가 걸리지 않기 때문에 작동하지 않습니다. 수정하지 않고 FOO2및 FOO3매크로 정의하는 몇 가지 방법이있다 FOO(사용 __VA_ARGS__파견 같은 효과를 얻을 수있는 다른 나) …
183 c  macros  c-preprocessor 

30
C ++ 매크로는 언제 유익합니까? [닫은]
휴무 . 이 질문은 더 집중되어야 합니다. 현재 답변을받지 않습니다. 이 질문을 개선하고 싶습니까? 하나의 문제에만 집중하도록 질문을 업데이트하십시오.이 게시물 편집 . 휴일 2 년 전 . 이 질문을 개선하십시오 C의 전처리는 정당 두려워하고 C ++ 커뮤니티에 의해 기피한다. 인라인 함수, const 및 템플릿은 일반적으로 a보다 안전하고 우수한 대안 #define입니다. …



6
C ++에서의 __FILE__, __LINE__ 및 __FUNCTION__ 사용법
당신의 C ++ 컴파일러가 지원하는 그들, 특별한 이유가 있다고 가정하면 되지 사용에 __FILE__, __LINE__그리고 __FUNCTION__로깅 및 디버깅 목적은? 주로 사용자에게 잘못된 데이터 (예 : 잘못된 줄 번호 또는 기능을 최적화의 결과보고)를 제공하거나 결과적으로 성능을 저하시키는 데 관심이 있습니다. 기본적으로, 신뢰할 수있는 __FILE__, __LINE__그리고 __FUNCTION__에 항상 옳은 일을?

2
C 전처리 기와 두 번 연결하고“arg ## _ ## MACRO”와 같이 매크로를 확장하는 방법은 무엇입니까?
일부 함수의 이름이 다음과 같은 매크로를 사용하여 특정 매크로 변수의 값에 의존하는 프로그램을 작성하려고합니다. #define VARIABLE 3 #define NAME(fun) fun ## _ ## VARIABLE int NAME(some_function)(int a); 불행히도, 매크로 NAME()는 그것을 int some_function_VARIABLE(int a); 오히려 int some_function_3(int a); 그래서 이것은 분명히 잘못된 길입니다. 다행스럽게도 VARIABLE에 대한 가능한 값의 수가 적기 …

10
GCC의 ## __ VA_ARGS__ 트릭에 대한 표준 대안?
이 잘 알려진 문제 C99에서 가변 인자 매크로 빈 인수와 함께. 예: #define FOO(...) printf(__VA_ARGS__) #define BAR(fmt, ...) printf(fmt, __VA_ARGS__) FOO("this works fine"); BAR("this breaks!"); BAR()위 의 사용은 C99 표준에 따라 실제로 다음 과 같이 확장되기 때문에 올바르지 않습니다. printf("this breaks!",); 후행 쉼표에 유의하십시오. 일부 컴파일러 (예 : Visual Studio …

3
C / C ++ 전 처리기 자체에서 단일 파운드 / 해시 부호 (#)의 목적은 무엇입니까?
Boost 라이브러리 소스 코드를 살펴본 결과 , 전 처리기 지시문이없는 단일 파운드 기호가있는 경우가 종종 있습니다. GCC 전 처리기 매뉴얼 및 사양 안내서를 읽었으며 이에 대한 내용을 찾을 수 없습니다. (1) #ifndef BOOST_CONFIG_HPP (2) # include <boost/config.hpp> (3) #endif (4) # (5) #if defined(BOOST_HAS_PRAGMA_ONCE) (6) # pragma once (7) #endif …
145 c++  c  boost  c-preprocessor 

17
C 프로그램에서 텍스트 파일을 문자로 "#include"[]
컴파일 타임에 전체 텍스트 파일을 C 프로그램에 문자열로 포함시키는 방법이 있습니까? 같은 : file.txt : This is a little text file main.c : #include <stdio.h> int main(void) { #blackmagicinclude("file.txt", content) /* equiv: char[] content = "This is\na little\ntext file"; */ printf("%s", content); } stdout에 인쇄되는 작은 프로그램 얻기 "이것은 작은 …

15
#define, enum 또는 const를 사용해야합니까?
내가 작업하고있는 C ++ 프로젝트 에는 4 가지 값을 가질 수 있는 플래그 종류의 값이 있습니다. 이 네 가지 플래그를 결합 할 수 있습니다. 플래그는 데이터베이스의 레코드를 설명하며 다음과 같습니다. 새로운 기록 삭제 된 레코드 수정 된 레코드 기존 기록 이제 각 레코드에 대해이 속성을 유지하려고하므로 열거 형을 사용할 수 …



14
컴파일 타임에 #define의 값을 어떻게 표시합니까?
내 코드가 사용하고 있다고 생각하는 Boost 버전을 파악하려고합니다. 다음과 같이하고 싶습니다. #error BOOST_VERSION 그러나 전처리 기는 BOOST_VERSION을 확장하지 않습니다. 나는 프로그램에서 런타임에 그것을 인쇄 할 수 있다는 것을 알고 있고, 답을 찾기 위해 전 처리기의 출력을 볼 수 있다는 것을 알고 있습니다. 컴파일하는 동안 이것을하는 방법이 유용 할 수 있다고 …

3
C / C ++ 매크로 문자열 연결
#define STR1 "s" #define STR2 "1" #define STR3 STR1 ## STR2 STR3 == "s1"을 연결하는 것이 가능합니까? args를 다른 매크로 함수에 전달하여이를 수행 할 수 있습니다. 그러나 직접적인 방법이 있습니까?
121 c++  c  c-preprocessor 

4
전 처리기 매크로에서 플랫폼 / 컴파일러를 식별하는 방법은 무엇입니까?
Linux, Windows, Mac OS에서 컴파일해야하는 크로스 플랫폼 코드를 작성 중입니다. Windows에서는 Visual Studio와 mingw를 지원해야합니다. #ifdef .. #endif환경에 배치해야하는 플랫폼 별 코드가 몇 가지 있습니다. 예를 들어, 여기에 win32 특정 코드를 배치했습니다. #ifdef WIN32 #include <windows.h> #endif 그러나 Linux 및 Mac OS를 어떻게 인식합니까? 사용해야하는 정의 이름 (또는 기타)은 무엇입니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.