Error: macro names must be identifiers using #ifdef 0

后端 未结 5 1377
悲哀的现实
悲哀的现实 2020-12-12 20:42

I have the source code of an application written in C++ and I just want to comment something using:

#ifdef 0
...
#endif

And I get this erro

相关标签:
5条回答
  • 2020-12-12 21:10
    #ifdef 0
    ...
    #endif
    

    #ifdef expect a macro rather than expression when using constant or expression

    #if 0
    ...
    #endif
    

    or

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

    if #ifdef is used the it reports this error

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

    Where #ifdef expect a macro rather than macro expresssion

    0 讨论(0)
  • 2020-12-12 21:11

    Note that you can also hit this error if you accidentally type:

    #define <stdio.h>
    

    ...instead of...

    #include <stdio.>
    
    0 讨论(0)
  • 2020-12-12 21:15

    The #ifdef directive is used to check if a preprocessor symbol is defined. The standard (C11 6.4.2 Identifiers) mandates that identifiers must not start with a digit:

    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
    

    The correct form for using the pre-processor to block out code is:

    #if 0
    : : :
    #endif
    

    You can also use:

    #ifdef NO_CHANCE_THAT_THIS_SYMBOL_WILL_EVER_EXIST
    : : :
    #endif
    

    but you need to be confident that the symbols will not be inadvertently set by code other than your own. In other words, don't use something like NOTUSED or DONOTCOMPILE which others may also use. To be safe, the #if option should be preferred.

    0 讨论(0)
  • 2020-12-12 21:16

    Use the following to evaluate an expression (constant 0 evaluates to false).

    #if 0
     ...
    #endif
    
    0 讨论(0)
  • 2020-12-12 21:35

    This error can also occur if you are not following the marco rules

    Like

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

    Reason: Macro Should begin with a letter, not a number

    Change to

    #define ONE_KILOBYTE 1024 // This resolves 
    
    0 讨论(0)
提交回复
热议问题