防止未定义的宏

时间:2014-08-19 08:54:21

标签: c++ c macros c-preprocessor

在C和C ++中,使用像这样的宏:

#if ( 1 == __MY_MACRO__ )
// Some code
#endif

如果未定义 MY_MACRO ,编译器将无法捕获并将其视为0.当设计代码时,可能会导致许多隐藏错误,因此必须定义宏(非零)。

有没有让编译器报告这个,即使编译器本身不寻找这样的东西?

5 个答案:

答案 0 :(得分:7)

使用#if defined(__MY_MACRO__)测试是否定义了宏值。

答案 1 :(得分:6)

#ifndef __MY_MACRO__
  #error "MY_MACRO NOT DEFINED"
#endif

答案 2 :(得分:3)

您可以使用#ifdefifndef来检查是否定义了宏。

示例:

#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__,则会导致除以零错误。