# if RTC
/* some code */
# endif
Run Code Online (Sandbox Code Playgroud)
是否应RTC 使用值定义宏?我的编译器没有抛出错误。所有编译器都一样吗?定义宏不是更安全吗?
在这样的预处理指令中,如果未定义宏,则将其视为0。
这是由语言保证的。
您可以依靠那里没有编译失败。
这是C ++的用词:
[cpp.cond]/11:由于宏扩展和对define-macro-expressions,has-include-expressions和has-attribute-expressions的求值而进行的所有替换truefalse0执行后,除和之外的所有其余标识符和关键字都被替换为pp-number,然后将每个预处理令牌转换为令牌。[..]
不,不必定义它。如果标识符在扩展结束时未定义#if,则其计算结果为0。
来自 ANSI C90:
在执行了由于宏扩展和
defined一元运算符引起的所有替换后,所有剩余的标识符都将替换为 pp-number0。
然而,在 C 标准化之前,编译器中可能不存在这种情况。我曾经看到过关于此问题的 GCC 警告(我认为是在 MinGW 上),但我现在找不到它的来源。
结论:所有符合标准的 C 编译器在遇到这种情况时不应抛出错误。在#if.