문제

C ++로 작성된 응용 프로그램의 소스 코드가 있으며 다음을 사용하여 댓글을 달고 싶습니다.

#ifdef 0
...
#endif

그리고이 오류가 발생합니다

오류 : 매크로 이름은 식별자 여야합니다

왜 이런 일이 일어나고 있습니까?

도움이 되었습니까?

해결책

#ifdef 지침은 확인하는 데 사용됩니다 전처리 기호가 정의 된 경우. 표준 (C11 6.4.2 Identifiers) 식별자가 숫자로 시작해서는 안되는 의무입니다.

identifier:
    identifier-nondigit
    identifier identifier-nondigit
    identifier digit
identifier-nondigit:
    nondigit
    universal-character-name
    other implementation-defined characters>
nondigit: one of
    _ a b c d e f g h i j k l m
    n o p q r s t u v w x y z
    A B C D E F G H I J K L M
    N O P Q R S T U V W X Y Z
digit: one of
    0 1 2 3 4 5 6 7 8 9

사전 프로세서를 사용하여 코드를 차단하는 올바른 양식은 다음과 같습니다.

#if 0
: : :
#endif

당신은 또한 사용할 수 있습니다 :

#ifdef NO_CHANCE_THAT_THIS_SYMBOL_WILL_EVER_EXIST
: : :
#endif

그러나 당신은 상징이 ~ 아니다 자신의 코드가 아닌 코드로 실수로 설정하십시오. 다시 말해, 같은 것을 사용하지 마십시오 NOTUSED 또는 DONOTCOMPILE 다른 사람들도 사용할 수 있습니다. 안전하기 위해 #if 옵션을 선호해야합니다.

다른 팁

다음을 사용하여 표현식을 평가하십시오 (상수 0은 False로 평가).

#if 0
 ...
#endif

Marco 규칙을 따르지 않으면이 오류가 발생할 수 있습니다.

처럼

#define 1K 1024 // Macro rules must be identifiers error occurs

이유 : 매크로는 숫자가 아닌 편지로 시작해야합니다.

로 변경

#define ONE_KILOBYTE 1024 // This resolves 
#ifdef 0
...
#endif

#ifdef는 상수 또는 표현을 사용할 때 표현보다는 매크로를 기대합니다.

#if 0
...
#endif

또는

#if !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif

#ifdef가 사용되면 IT는이 오류를보고합니다

#ifdef !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif

여기서 #ifdef는 매크로 표현보다는 매크로를 기대합니다

실수로 입력하면이 오류를 누를 수도 있습니다.

#define <stdio.h>

...대신에...

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