我有一个用 C++ 编写的应用程序的源代码,我只想使用以下方法评论一些东西:
#ifdef 0
...
#endif
我得到这个错误
错误:宏名称必须是标识符
为什么会这样?
我有一个用 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 计算为假)。
#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,它会报告此错误
#ifdef !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif
#ifdef 期望宏而不是宏表达式
请注意,如果您不小心键入以下内容,也可能会遇到此错误:
#define <stdio.h>
...代替...
#include <stdio.>