【发布时间】:2014-08-19 08:54:20
【问题描述】:
在 C 和 C++ 中,当使用这样的宏时:
#if ( 1 == __MY_MACRO__ )
// Some code
#endif
如果 MY_MACRO 未定义,编译器将不会捕获并将其视为 0。当设计代码时,这可能会导致许多隐藏的错误,因此必须定义宏(非零)。
即使编译器本机不寻找这样的东西,是否可以让编译器报告这一点?
【问题讨论】:
-
"如果 MY_MACRO 未定义,编译器将不会捕获并将其视为 0" 这不是真的。如果MY_MACRO未定义,编译器会报错。
-
它不会报告错误,基于我测试过的几个编译器,包括 Visual Studio 2013。
-
@nos 是的,我错了,现在我看到它在
#if内。 C++ 标准规定所有未定义的标识符都替换为0。
标签: c++ c macros c-preprocessor