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

mer*_*011 3 c++ macros c-preprocessor

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

预处理器有一个被调用的运算符defined,它正是这样做的,但它仅在#if指令中可用.我想知道我是否可以在某种程度上暴露这个功能#if,例如在C++代码行的中间.

这通常是可能的,如果是这样,怎么样?

mas*_*oud 8

据我所知,你想要下面的东西,不幸的是不可能:

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

int x = IS_DEFINED_MACRO(MACRO_TO_TEST);
Run Code Online (Sandbox Code Playgroud)

唯一可行的方法是

#ifdef MACRO_TO_TEST
   #define IT_IS_DEFINED 1
#else
   #define IT_IS_DEFINED 0
#endif
Run Code Online (Sandbox Code Playgroud)