用 defined(X) 定义一个宏

Define a macro with defined(X)

这是我要使用的宏,如果定义了 X_DEFINED,它将被计算为 DEFAULT_X,否则它将被计算为 x

#define GET_X(x) (defined(X_DEFINED) ? DEFAULT_X : x)

编译不通过,报错

error: 'X_DEFINED' was not declared in this scope

有什么建议吗?我希望能够根据 X_DEFINED 是否定义

在参数和全局变量之间 select

defined() 仅适用于 #if 和类似的预处理器指令。

你想要这样的东西:

#ifdef X_DEFINED
#define GET_X(x) DEFAULT_X
#else
#define GET_X(x) x
#endif

你需要定义2个不同的宏,取决于是否定义了X_DEFINED

#ifdef X_DEFINED
#   define GET_X(x) x
#else
#   define GET_X(x) DEFAULT_X
#endif

草率地说,您将运行时的东西(三元运算符的计算)与甚至在编译(预处理器)之前发生的东西混合在一起。您可以使用 #ifdef 代替:

#ifdef X_DEFINED
    #define GET_X(x) DEFAULT_X
#else
    #define GET_X(x) x
#endif