在#if中使用的未定义常量的值是多less?
我的预处理器似乎假设为了评估#if
条件,未定义的常量是0。
这可以依赖,或做未定义的常量给未定义的行为?
是的,它可以依靠。 C99标准在第6.10.1节规定:
在由于macros扩展和所定义的一元运算符的所有replace之后,所有剩余的标识符被replace为pp-number
0
编辑
对不起,我以为这是一个C的问题; 仍然没什么大不了的,C ++标准(§16.1¶4)中的等价部分指出:
在由于macros扩展和所定义的一元运算符的所有replace之后,所有剩余的标识符和关键字(除
true
和false
)被replace为pp号码0
唯一的区别是对于true
的不同处理,在C中不需要特殊的处理,而在C ++中它们即使在预处理阶段也有特殊的含义。
未定义为macros的标识符在评估expression式之前转换为0
。
标识符为true
的情况例外,将其转换为1
。 这是特定于C ++预处理器; 在C中,这不会发生,你需要包含<stdbool.h>
以这种方式使用true
,在这种情况下,它将被定义为一个macros,并且不需要特殊的处理。