错误:宏名称必须是使用#ifdef 0的标识符 我有C++编写的应用程序的源代码,我只想用以下的注释注释: #ifdef 0 ... #endif

错误:宏名称必须是使用#ifdef 0的标识符 我有C++编写的应用程序的源代码,我只想用以下的注释注释: #ifdef 0 ... #endif,c++,macros,c-preprocessor,C++,Macros,C Preprocessor,我得到了这个错误 #ifdef !defined(PP_CHECK) || defined(PP_CHECK_OTHER) .. #endif 错误:宏名称必须是标识符 为什么会发生这种情况?使用以下公式计算表达式(常数0的计算结果为false) #ifdef指令用于检查是否定义了预处理器符号。标准(C116.4.2标识符)规定标识符不得以数字开头: 标识符: 非数字标识符 非数字标识符 标识符数字 非数字标识符: 非数字 通用字符名 其他实现定义的字符> 非数字:其中之一 _a b c d

我得到了这个错误

#ifdef !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif
错误:宏名称必须是标识符


为什么会发生这种情况?

使用以下公式计算表达式(常数0的计算结果为false)

#ifdef指令用于检查是否定义了预处理器符号。标准(
C116.4.2标识符
)规定标识符不得以数字开头:

标识符:
非数字标识符
非数字标识符
标识符数字
非数字标识符:
非数字
通用字符名
其他实现定义的字符>
非数字:其中之一
_a b c d e f g h i j k l m
n无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无P Q R S T U V W X Y Z
数字:其中一位
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
选项。

如果您不遵守marco规则,也可能发生此错误

原因:宏应该以字母开头,而不是数字

改为

#define ONE_KILOBYTE 1024 // This resolves 

请注意,如果您意外键入以下内容,也可能出现此错误:

#define <stdio.h>
#定义
…而不是

#include <stdio.>
#包括
#ifdef需要宏而不是表达式 当使用常量或表达式时

#if 0
...
#endif

如果使用了#ifdef,则会报告此错误

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

其中#如果你期望的是宏而不是宏表达式

我想你记错了#IFDEF 0是C和C++中的一个错误。你是对的,我错了,它在C中不起作用,我不会删除这个问题,因为将来可能有人犯同样的错误。“爱德华多感谢你不删除这个问题。我有一些代码,我偶尔编译,用-DunNuffe编译。我还没有调查原因——我讨厌猜测。@Pax:事实上,C编译器不太可能允许这种符号——如果允许的话,那就是错误的。另见我对问题的评论。我建议删除“很可能…”这句话。并不是所有的C编译器都符合ANSI标准。我已经使用了很多嵌入式编译器,它们允许像这样的各种技巧。但我会修好的。
#if 0
...
#endif
#if !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif
#ifdef !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif