«c-preprocessor» 태그된 질문

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

7
매크로가 아직 정의되지 않은 경우에만 정의하는 이유는 무엇입니까?
C 코드베이스 전체에서 모든 매크로가 다음과 같이 정의 된 것을 볼 수 있습니다. #ifndef BEEPTRIM_PITCH_RATE_DEGPS #define BEEPTRIM_PITCH_RATE_DEGPS 0.2f #endif #ifndef BEEPTRIM_ROLL_RATE_DEGPS #define BEEPTRIM_ROLL_RATE_DEGPS 0.2f #endif #ifndef FORCETRIMRELEASE_HOLD_TIME_MS #define FORCETRIMRELEASE_HOLD_TIME_MS 1000.0f #endif #ifndef TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS #define TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS 50.0f #endif 매크로를 정의하는 대신 이러한 정의 검사를 수행하는 이유는 무엇입니까? #define BEEPTRIM_PITCH_RATE_DEGPS 0.2f #define …


1
전 처리기 지시문에서 ## (이중 해시)는 무엇을합니까?
#define DEFINE_STAT(Stat) \ struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat; 위의 라인은 Unreal 4에서 가져온 것이며, 저는 Unreal 포럼에서 질문 할 수 있다는 것을 알고 있습니다.하지만 이것은 여기에서 질문해야하는 일반적인 C ++ 질문이라고 생각합니다. 첫 번째 줄이 매크로를 정의한다는 것을 이해하지만 C ++의 전 처리기 헛소리에 정통하지 않아서 거기에서 길을 잃었습니다. 논리는 백 슬래시가 …

3
C 전처리기를 사용하여 int를 문자열에 연결
C를 사용하여 #define'd int를 #define'd 문자열에 연결할 수있는 방법을 알아 내려고합니다. 전처리기를 . 내 컴파일러는 CentOS 5의 GCC 4.1입니다. 솔루션은 MinGW에서도 작동합니다. 버전 번호를 문자열에 추가하고 싶지만 작동하도록 할 수있는 유일한 방법은 문자열로 정의 된 버전 번호의 복사본을 만드는 것입니다. 내가 찾을 수있는 가장 가까운 것은 매크로 인수를 인용하는 방법 …

4
매크로 인수를 문자열 리터럴로 사용하는 방법은 무엇입니까?
변수 이름의 문자열 리터럴 표현과 변수 자체를 함수로 전달하는 매크로를 작성하는 방법을 알아 내려고합니다. 예를 들어 다음과 같은 기능이 있습니다. void do_something(string name, int val) { cout << name << ": " << val << endl; } 이 작업을 수행 할 수 있도록 매크로를 작성하고 싶습니다. int my_val = 5; …

13
## 전 처리기 연산자의 응용 프로그램과 고려해야 할 사항은 무엇입니까?
이전의 많은 질문에서 언급했듯이 K & R을 통해 작업 중이며 현재 전처리기를 사용하고 있습니다. 더 흥미로운 것 중 하나는 이전에 C를 배우려는 시도에서 알지 못했던 것입니다. ##전 처리기 연산자입니다. K & R에 따르면 : 전 처리기 연산자 ## 는 매크로 확장 중에 실제 인수를 연결하는 방법을 제공합니다. 대체 텍스트의 매개 …

19
열거 형 유형의 변수를 C에서 문자열로 사용하는 쉬운 방법은 무엇입니까?
내가하려는 작업은 다음과 같습니다. typedef enum { ONE, TWO, THREE } Numbers; 다음과 유사한 스위치 케이스를 수행하는 함수를 작성하려고합니다. char num_str[10]; int process_numbers_str(Numbers num) { switch(num) { case ONE: case TWO: case THREE: { strcpy(num_str, num); //some way to get the symbolic constant name in here? } break; default: return …


2
이중 스트링 화 트릭은 정확히 어떻게 작동합니까?
적어도 일부 C 전처리기를 사용하면 하나의 함수와 유사한 매크로를 통해이를 문자열 화하는 다른 매크로로 전달하여 매크로의 이름이 아닌 값을 문자열화할 수 있습니다. #define STR1(x) #x #define STR2(x) STR1(x) #define THE_ANSWER 42 #define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */ 여기에 사용 사례의 예가 있습니다 . 이것은 적어도 GCC와 Clang (둘 다 -std=c99)에서 …


7
Linux 커널의 container_of 매크로 이해
Linux 커널을 탐색 할 때 container_of다음과 같이 정의 된 매크로를 찾았습니다 . #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) container_of가 무엇을하는지 이해하지만 이해하지 못하는 것은 마지막 문장입니다. (type *)( (char *)__mptr - offsetof(type,member) );}) 다음과 …


6
#ifdef 내부 #define
다음과 같이 작성하려고합니다. #define COV_ON(x) \ #ifdef COVERAGE_TOOL \ _Pragma (COVERAGE #x) #endif COV_ON이렇게 정의 할 방법 이 있습니까? 나는 #ifdef#define 안에 가질 수 없기 때문에 위에서 한 일이 잘못되었음을 알고 있습니다 . ( #은에서 허용되는 문자가 아닙니다 #define). 그래서 어떤 해결책이 있습니까?
83 c  c-preprocessor 

6
Objective-C에서 #define 대 const
저는 Objective-C를 처음 사용하며 const및 전처리 지시문 에 대해 몇 가지 질문이 #define있습니다. 첫째,을 사용하여 상수의 유형을 정의 할 수 없음을 발견했습니다 #define. 왜 그런 겁니까? 둘째, 그중 하나를 다른 것보다 사용하면 어떤 이점이 있습니까? 마지막으로 어떤 방법이 더 효율적이고 더 안전합니까?

4
다중 라인 전 처리기 매크로
다중 라인 전 처리기 매크로를 만드는 방법은 무엇입니까? 한 줄을 만드는 방법을 알고 있습니다. #define sqr(X) (X*X) 하지만 다음과 같은 것이 필요합니다. #define someMacro(X) class X : public otherClass { int foo; void doFoo(); }; 이 작업을 수행하려면 어떻게해야합니까? 이것은 예시 일 뿐이며 실제 매크로는 매우 길 수 있습니다.
81 c++  c  c-preprocessor 

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