在#if中使用的未定义常量的值是多less?

我的预处理器似乎假设为了评估#if条件,未定义的常量是0。

这可以依赖,或做未定义的常量给未定义的行为?

是的,它可以依靠。 C99标准在第6.10.1节规定:

在由于macros扩展和所定义的一元运算符的所有replace之后,所有剩余的标识符被replace为pp-number 0

编辑

对不起,我以为这是一个C的问题; 仍然没什么大不了的,C ++标准(§16.1¶4)中的等价部分指出:

在由于macros扩展和所定义的一元运算符的所有replace之后,所有剩余的标识符和关键字(除truefalse )被replace为pp号码0

唯一的区别是对于true的不同处理,在C中不需要特殊的处理,而在C ++中它们即使在预处理阶段也有特殊的含义。

未定义为macros的标识符在评估expression式之前转换为0

标识符为true的情况例外,将其转换为1 。 这是特定于C ++预处理器; 在C中,这不会发生,你需要包含<stdbool.h>以这种方式使用true ,在这种情况下,它将被定义为一个macros,并且不需要特殊的处理。