我想定义一个宏,它可以将另一个宏作为参数,如果未定义则返回 0,如果是则返回 1
预处理器有一个称为操作符的操作符defined
正是这样做的,但它只在#if
指令中可用。我想知道我是否可以以某种方式将这个功能暴露在 之外#if
,例如在一行 C++ 代码的中间。
这通常是可能的吗?如果可以,怎么做?
我想定义一个宏,它可以将另一个宏作为参数,如果未定义则返回 0,如果是则返回 1
预处理器有一个称为操作符的操作符defined
正是这样做的,但它只在#if
指令中可用。我想知道我是否可以以某种方式将这个功能暴露在 之外#if
,例如在一行 C++ 代码的中间。
这通常是可能的吗?如果可以,怎么做?
据我了解,您想要像下面这样的东西,不幸的是这是不可能的:
#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
我阅读了您的评论“正是为了实际 C++ 代码的目的,未在命令行上定义的宏可以默认为 0”。
您可以做的一件事是简单地为每个相应的宏定义一个默认值:
#ifndef WIBBLE
#define WIBBLE 0
#endif
然后在编译时,您可以选择传递-DWIBBLE=100
给编译器以覆盖默认值。