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