定义具有定义(x)的宏

Define a macro with defined(X)

本文关键字:定义 的宏      更新时间:2023-10-16

这是我要使用的宏,如果定义了 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是否定义

在参数和全局变量之间进行选择。

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