我想定义一个宏,它可以将另一个宏作为参数,如果未定义则返回0,如果是
则返回1预处理器有一个名为defined
的运算符,它正是这样做的,但它仅在#if
指令中可用。我想知道我是否可以在#if
之外以某种方式公开此功能,例如在C ++代码行的中间。
这一般是否可行,若然,怎么办?
答案 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
传递给编译器以覆盖默认值。