#if 전 처리기 지시문이 C ++에 중첩 될 수 있습니까?


84

C ++의 전 처리기 지시문에 대한 질문이 있습니다.

예를 들면 :

#ifndef QUESTION

//some code here

#ifndef QUESTION

//some code here

#endif

#endif

이런 식으로 사용할 수 있습니까 ? ifndef그리고 C ++ 컴파일러가 및를 endif올바른 방식으로 일치시킬 수 있습니까?


1
조건문을 중첩 할 수 있으며 다른 매크로에서 하나의 매크로를 호출 할 수 있지만 매크로를 직접 중첩 할 수 없습니다. 예를 들어 #define AAA #define XXX올바르게 작동하지 않습니다.
SF.

2
이후 는 C 질문은 그냥이 하나의 중복으로 폐쇄되었다, 내가 지적거야이이 문제에 관한 한 지금까지로 최소로, 동일 프리 프로세서 C 및 C ++에 대한 규칙.
Keith Thompson

답변:


112

응 우리는 할 수있어. #endif이전에 문 일치 #if #ifdef또는 #ifndef등이있는 해당이되지 않았습니다 #endif.

예 :

#if  ----------|
#if  -----|    |
#endif ---|    |
#endif --------|

여기에 두 개의 #endif가 있으므로 첫 번째 #endif가 두 번째 #ifndef와 일치합니까?

이전 항목과 일치하지 않습니다. 그것은 우리 그것들을 중첩 할 수 없다는 것을 의미 합니다.
Fred Foo

49

예, 중첩 #if/ #endif블록을 할 수 있습니다 . 일부 C 코딩 스타일은

#ifdef CONDITION1
# ifdef CONDITION2
# endif
#endif

공백을 사용하여 중첩 수준을 나타냅니다.


5
중첩 비트에 +1, 때로는 명확하게 많은 도움이됩니다.
André Caron 2011

공백을 삽입하는 이유는 무엇입니까? 왜 그냥 들여 쓰기를하지#ifdef
Jahid

3
#와 전 처리기 지시문 사이에 공백 이 허용되는 지도 몰랐 습니다. 그 팁에 감사드립니다!
AlexR

0

코드에서 #undef QUESTION을 사용하지 않으면 #ifndef QUESTION 섹션이 삭제됩니다.

행운을 빕니다!


죄송합니다. 코드 샘플을 잘못 읽었습니다! 나는 그것이 #ifdef QUESTION으로 시작했다고 생각했습니다
bert-jan 2011
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.