#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
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
'programing tip' 카테고리의 다른 글
하위 디렉토리에서 .htaccess 암호 보호를 제거하는 방법 (0) | 2020.09.01 |
---|---|
HTTPS를 통해 전송되지 않는 리소스 확인 (0) | 2020.09.01 |
TCP 루프백 연결과 Unix 도메인 소켓 성능 (0) | 2020.09.01 |
HTTPURLConnection이 HTTP에서 HTTPS 로의 리디렉션을 따르지 않음 (0) | 2020.09.01 |
PostgreSQL에서 데이터베이스 스키마를 내보내려면 어떻게해야합니까? (0) | 2020.09.01 |