반응형
ifdef의 부울 : "#ifdef A && B"가 "#if defined (A) && defined (B)"와 동일합니까?
C ++에서는 다음과 같습니다.
#ifdef A && B
다음과 동일 :
#if defined(A) && defined(B)
?
그렇지 않다고 생각했지만 컴파일러 (VS2005)에서 차이점을 찾을 수 없었습니다.
그들은 동일하지 않습니다. 첫 번째는 작동하지 않습니다 (gcc 4.4.1에서 테스트했습니다). 오류 메시지 :
test.cc:1:15 : 경고 : #ifdef 지시문 끝에 추가 토큰
여러 항목이 정의되어 있는지 확인하려면 두 번째 항목을 사용하십시오.
#if 지시문에서 정의 된 연산자를 사용하여 전 처리기 행 내에서 0 또는 1로 평가되는 표현식을 사용할 수 있습니다. 이렇게하면 중첩 된 전처리 지시문을 사용하지 않아도됩니다. 식별자 주위의 괄호는 선택 사항입니다. 예를 들면 :
#if defined (MAX) && ! defined (MIN)
정의 된 연산자를 사용하지 않고 위의 예를 수행하려면 다음 두 가지 지시문을 포함해야합니다.
#ifdef max #ifndef min
다음 결과는 동일합니다.
1.
#define A
#define B
#if(defined A && defined B)
printf("define test");
#endif
2.
#ifdef A
#ifdef B
printf("define test");
#endif
#endif
OP와 약간 다른 예 (UNIX / g ++)를 찾는 사람들에게는 다음이 도움이 될 수 있습니다.
`
#if(defined A && defined B && defined C)
const string foo = "xyz";
#else
#if(defined A && defined B)
const string foo = "xy";
#else
#if(defined A && defined C)
const string foo = "xz";
#else
#ifdef A
const string foo = "x";
#endif
#endif
#endif
#endif
VS2015에서는 위의 어느 것도 작동하지 않습니다. 올바른 지시문은 다음과 같습니다.
#if (MAX && !MIN)
여기에서 더보기
반응형
'Programing' 카테고리의 다른 글
`size_t`에 어떤 헤더를 포함해야합니까? (0) | 2020.10.17 |
---|---|
Vim에서 삽입 모드로 들어 가지 않고 커서가있는 곳에 줄 바꿈을 삽입하려면 어떻게해야합니까? (0) | 2020.10.17 |
UTC는 일광 절약 시간을 준수합니까? (0) | 2020.10.17 |
CSS : 높이를 지정하지 않고 두 요소를 서로 위에 배치하는 방법은 무엇입니까? (0) | 2020.10.17 |
EJB에서 로컬 / 원격 및 인터페이스없는보기 란 무엇입니까? (0) | 2020.10.17 |