枚举值何时解析?换句话说,以下代码片段是否符合标准?
enum{
A,
B,
MAX
}
#if MAX > 42
# error "Woah! MAX is a lot!"
#endif
Run Code Online (Sandbox Code Playgroud)
预处理器与枚举没有任何关系.但是你的例子编译没有错误,所以#if MAX > 42指令发生了什么?
每当预处理器处理条件指令时,任何未定义为宏的标识符都被视为0.因此假设MAX未在其他地方定义为宏,您的代码片段相当于:
enum{
A,
B,
MAX
}
#if 0 > 42
# error "Woah! MAX is a lot!"
#endif
Run Code Online (Sandbox Code Playgroud)
从C99 6.10.1/3"条件包含":
...在由于宏扩展和已定义的一元运算符执行的所有替换之后,所有剩余的标识符都替换为pp-number 0,然后每个预处理标记都转换为标记....
C89/C90标准中的措辞相同.