Programing

ifdef의 부울 : "#ifdef A && B"가 "#if defined (A) && defined (B)"와 동일합니까?

lottogame 2020. 10. 17. 08:59
반응형

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)

여기에서 더보기

참고 URL : https://stackoverflow.com/questions/1312132/boolean-in-ifdef-is-ifdef-ab-the-same-as-if-defineda-definedb

반응형