4

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

预处理器有一个称为操作符的操作符defined正是这样做的,但它只在#if指令中可用。我想知道我是否可以以某种方式将这个功能暴露在 之外#if,例如在一行 C++ 代码的中间。

这通常是可能的吗?如果可以,怎么做?

4

2 回答 2

9

据我了解,您想要像下面这样的东西,不幸的是这是不可能的:

#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
于 2013-10-25T20:23:47.250 回答
1

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

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

#ifndef WIBBLE
#define WIBBLE 0
#endif

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

于 2013-10-25T21:35:59.737 回答