C 和 C 中的未定义常量和 #if 条件评估
在预处理器逻辑中,宏和常量通常起着至关重要的作用。当处理 #if 条件中未定义的常量时,会出现一种常见情况。在这里,我们将探讨依赖这些未定义常量的可预测行为是否有效。
问题:
开发人员通常假设未定义常量的值为在 #if 评估中使用时为 0。这个假设可靠吗?还是我们应该期望未定义常量产生未定义的行为?
答案:
是的,您可以依赖这个假设。 C99 标准在 §6.10.1 ¶3 中明确规定:
由于宏扩展和定义的一元运算符执行所有替换后,所有剩余标识符都替换为 pp-number 0
类似地,C 标准(§16.1 ¶4)规定:
在执行了由于宏扩展和定义的一元运算符而进行的所有替换后,所有剩余的标识符和关键字(除了 true 和 false)替换为 pp-number 0
换句话说,在宏扩展和其他预处理步骤之后,#if 条件中出现的任何未定义的标识符或常量都会自动替换为值 0。此行为在各个版本中都是一致的C 和 C .
这种可预测的行为使开发人员可以方便地在 #if 条件中使用未定义的常量作为标志或占位符,而不会带来未定义的结果或错误的风险。当预处理阶段之前未定义未定义常量时,编译器默认将其视为 0。
以上是C 和 C 中的 #if 条件中未定义常量的计算结果是否为 0?的详细内容。更多信息请关注PHP中文网其他相关文章!