#define one 0
#ifdef one
printf("one is defined ");
#ifndef one
printf("one is not defined ");
여기서 #ifdef
및 의 역할은 무엇이며 #ifndef
출력은 무엇입니까?
#define one 0
#ifdef one
printf("one is defined ");
#ifndef one
printf("one is not defined ");
여기서 #ifdef
및 의 역할은 무엇이며 #ifndef
출력은 무엇입니까?
답변:
ifdef/endif
또는 ifndef/endif
쌍 내부의 텍스트 는 조건에 따라 전처리기에 의해 남아 있거나 제거됩니다. ifdef
"다음이 정의 된 경우"를 ifndef
의미하고 "다음이 정의 되지 않은 경우 "를 의미 합니다.
그래서:
#define one 0
#ifdef one
printf("one is defined ");
#endif
#ifndef one
printf("one is not defined ");
#endif
다음과 같습니다.
printf("one is defined ");
이후 one
정의는 그래서 ifdef
사실과는 ifndef
false입니다. 그것이 무엇으로 정의 되어 있는지는 중요하지 않습니다 . 비슷한 (내 생각에 더 나은) 코드는 다음과 같습니다.
#define one 0
#ifdef one
printf("one is defined ");
#else
printf("one is not defined ");
#endif
이 특정 상황에서 의도를 더 명확하게 지정하기 때문입니다.
귀하의 특정 경우에는 이후 텍스트 가 정의되어 ifdef
제거되지 않습니다 one
. 애프터 텍스트가 ifndef
되어 같은 이유로 제거. endif
어떤 지점에 두 개의 닫는 선 이 있어야 하며 첫 번째 줄은 다음과 같이 다시 포함되기 시작합니다.
#define one 0
+--- #ifdef one
| printf("one is defined "); // Everything in here is included.
| +- #ifndef one
| | printf("one is not defined "); // Everything in here is excluded.
| | :
| +- #endif
| : // Everything in here is included again.
+--- #endif
누군가는 질문에 약간의 함정이 있음을 언급해야합니다. #ifdef
다음 기호가 #define
명령 줄을 통해 또는 명령 줄을 통해 정의되었는지 여부 만 확인 하지만 그 값 (사실상 대체)은 관련이 없습니다. 당신은 심지어 쓸 수 있습니다
#define one
프리 컴파일러는이를 받아들입니다. 하지만 사용 #if
한다면 다른 것입니다.
#define one 0
#if one
printf("one evaluates to a truth ");
#endif
#if !one
printf("one does not evaluate to truth ");
#endif
줄 것이다 one does not evaluate to truth
. 키워드를 defined
사용하면 원하는 동작을 얻을 수 있습니다.
#if defined(one)
따라서 #ifdef
이 #if
구조 의 장점은 코드 경로를 더 잘 처리 할 수있게하고 이전 #ifdef
/ #ifndef
쌍으로 이와 같은 작업을 시도하는 것 입니다.
#if defined(ORA_PROC) || defined(__GNUC) && __GNUC_VERSION > 300
"#if one"은 "#define one"이 작성 되었다면 "#if one"이 실행되고 그렇지 않으면 "#ifndef one"이 실행됨을 의미합니다.
이것은 C 언어의 if, then, else 분기 문에 해당하는 C 전 처리기 (CPP) 지시문입니다.
즉, {#define one} then printf ( "one은 진실로 평가됩니다."); else printf ( "하나는 정의되지 않았습니다"); 따라서 #define 한 명령문이 없으면 명령문의 else 분기가 실행됩니다.
printf가 함수 블록에 없기 때문에 코드가 이상하게 보입니다.