문제

이 지침의 차이점은 무엇입니까?

#ifdef FOO

#if defined FOO

#if defined(FOO)

CCS 컴파일러를 사용하고 있지만 다른 사람에 관심이 있습니다. 컴파일러도 마찬가지입니다.

도움이 되었습니까?

해결책

내가 본 것에서, 주된 용도 #if defined 한 줄에서 여러 거시 정의를 확인하는 것입니다. 그렇지 않으면 단일 매크로 정의 조건부의 경우 내가 아는 한 동일합니다.

#include <stdio.h>
int main()
{
#if defined(FOO) && defined(BAR)
    printf("foobar!\n");
#else
    printf("nothing.\n");
#endif
    return 0;
}
$ tcc -DFOO -run a.c 
nothing.
$ tcc -DBAR -run a.c 
nothing.
$ tcc -DFOO -DBAR -run a.c 
foobar!

또한 위의 프로그램은 잘 컴파일합니다 gcc -Wall -ansi a.c 그래서 제안합니다 #if defined 정확한 ansi C입니다. 또한 이것은 1987 년의 ANSI 요약 기울기 #if defined ANSI 표준에 따른 전처리 업체의 새로 정의 된 동작으로 ~해야 한다 사용할 ANSI 호환 컴파일러에서 표준을 유지하십시오.

당신이 사용하지 않았다면 #if defined, 당신은해야합니다

#ifdef FOO
#ifdef BAR
    printf("foobar!\n");
#endif /* BAR */
#endif /* FOO */

또한, C 전 처리기의 Redhat 매뉴얼 말한다

#if defined MACRO 정확히 동일합니다 #ifdef MACRO.

다른 팁

C99 표준에 따르면 3 가지 양식 모두 정확히 동등하고 유효합니다. 일반적으로 #ifdef 다른 두 형태보다 짧기 때문에 선호되지만 다른 형태를 사용하려는 상황이 있습니다.

  • 여러 기호의 정의 또는 더 복잡한 표현식을 테스트하는 경우 :

    #if defined(ONE_THING) && define(ANOTHER_THING) && (3 < 4)
    ...
    #endif
    
  • 조항이 여러 개있는 경우 사용하기가 훨씬 쉽습니다. #elif defined(...) ~보다 #else, #ifdef:

    #if defined(ONE_THING)
    ...
    #elif defined(ANOTHER_THING)
    ...
    #elif defined(THIRD_THING)
    ...
    #else
    ...
    #endif
    

괄호의 사용 defined 선택 사항입니다. 나는 그들을 사용하여 명확성을 더하는 것을 선호합니다.

#ifdef 짧습니다 #if 정의 그리고 나는 당신이 둘 다 괄호가 필요하지 않다고 생각합니다. 그래서 기본적으로 그들은 동일합니다.

Turbo C에서 오는데, 나는 보는 데 익숙해 #ifdef 보다는 #if 정의

원래 만 있었다 #ifdef, 하지만 때 #if 그것을 따라 와서 가질 필요가 있었다 defined() 위해서는 #if 슈퍼 세트 #ifdef.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top