有没有办法根据是否定义将变量宏转换为0或1?

时间:2013-10-25 20:15:19

标签: c++ macros c-preprocessor

我想定义一个宏,它可以将另一个宏作为参数,如果未定义则返回0,如果是

则返回1

预处理器有一个名为defined的运算符,它正是这样做的,但它仅在#if指令中可用。我想知道我是否可以在#if之外以某种方式公开此功能,例如在C ++代码行的中间。

这一般是否可行,若然,怎么办?

2 个答案:

答案 0 :(得分:8)

据我所知,你想要一些像下面那样不可能的东西:

#define IS_DEFINED_MACRO(X) #ifdef(X) 1 #else 0 #endif  // IMPOSSIBlE!

int x = IS_DEFINED_MACRO(MACRO_TO_TEST);

唯一可行的方法是

#ifdef MACRO_TO_TEST
   #define IT_IS_DEFINED 1
#else
   #define IT_IS_DEFINED 0
#endif

答案 1 :(得分:1)

我读了你的评论“正是这样,为了实际的C ++代码,未在命令行中定义的宏可以默认为0”。

您可以做的一件事就是为每个相应的宏定义一个默认值:

#ifndef WIBBLE
#define WIBBLE 0
#endif

然后在编译时,您可以选择将-DWIBBLE=100传递给编译器以覆盖默认值。