当 c 预处理器运行#if/#elif预处理指令时,它会对直接跟随的标记执行 4 个操作:
defined {identifier}为其他情况。1{identifier}00。constant-expression.现在,从标准(c99,6.10.1)中可以很清楚地看出,步骤 3 和 4 实际上按该顺序发生,并且在步骤 1 和 2 完成之后。但我找不到关于1和2顺序的任何说明。
从我所做的一些有限测试来看,gcc 似乎根据标记的顺序执行步骤 1 和 2 - 在 中defined MACRO,defined首先执行,但在MACRO(defined ID)宏中执行。
标准是否要求这种行为?实现定义的?不明确的?