在C和C ++中,使用像这样的宏:
#if ( 1 == __MY_MACRO__ )
// Some code
#endif
如果未定义 MY_MACRO ,编译器将无法捕获并将其视为0.当设计代码时,可能会导致许多隐藏错误,因此必须定义宏(非零)。
有没有让编译器报告这个,即使编译器本身不寻找这样的东西?
答案 0 :(得分:7)
使用#if defined(__MY_MACRO__)
测试是否定义了宏值。
答案 1 :(得分:6)
#ifndef __MY_MACRO__
#error "MY_MACRO NOT DEFINED"
#endif
答案 2 :(得分:3)
您可以使用#ifdef
或ifndef
来检查是否定义了宏。
示例:
#ifndef MY_MACRO
# error "MY_MACRO is not defined"
#endif
可以在此处找到更多信息:https://gcc.gnu.org/onlinedocs/cpp/Ifdef.html
答案 3 :(得分:0)
我不得不求助于
#if !defined( __MY_MACRO__ )
MACRO_NOT_DEFINED; //to cause compiler error
#endif
#if ( 1 == __MY_MACRO__ )
//code
#endif
看起来很丑陋。
答案 4 :(得分:0)
我知道的人想出了一个聪明的1班轮
#if ( (1/defined(_MY_MACRO__) && 1 == _MY_MACRO__ ) )
//code
#endif
如果未定义_MY_MACRO__,则会导致除以零错误。