C ++에서는 다음과 같습니다.
#ifdef A && B
다음과 동일 :
#if defined(A) && defined(B)
?
그렇지 않다고 생각했지만 컴파일러 (VS2005)에서 차이점을 찾을 수 없었습니다.
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
#else
인해 문제가 발생할 수 있습니다. 첫 번째 옵션 만이 실제로 질문자가 요청한 것을 정확히 의미합니다.
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