programing tip

#ifdef 및 #ifndef의 역할

itbloger 2020. 9. 1. 07:18
반응형

#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사실과는 ifndeffalse입니다. 그것이 무엇으로 정의 되어 있는지는 중요하지 않습니다 . 비슷한 (내 생각에 더 나은) 코드는 다음과 같습니다.

#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

The advantage of the #if construct is to allow a better handling of code paths, try to do something like that with the old #ifdef/#ifndef pair.

#if defined(ORA_PROC) || defined(__GNUC) && __GNUC_VERSION > 300

"#if one" means that if "#define one" has been written "#if one" is executed otherwise "#ifndef one" is executed.

This is just the C Pre-Processor (CPP) Directive equivalent of the if, then, else branch statements in the C language.

i.e. if {#define one} then printf("one evaluates to a truth "); else printf("one is not defined "); so if there was no #define one statement then the else branch of the statement would be executed.


The code looks strange because the printf are not in any function blocks.

참고URL : https://stackoverflow.com/questions/3744608/the-role-of-ifdef-and-ifndef

반응형