定义具有定义(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
是否定义
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
相关文章:
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 使用宏编译时使用用户定义的数学函数,或者仅使用 c++ 中标准数学库中的函数
- 如何编写将展开以定义具有模板参数的对象的宏
- 获取 if 语句以检查定义的宏
- 模板定义的宏
- 使用位移定义的宏值
- 编译后未定义的宏参数会发生什么
- 避免使用几乎相同的类定义的宏
- 在C DLL中定义的宏,并在C#中使用相同
- 定义的宏无法识别
- 我可以在字符串化之前强制未定义的宏扩展吗?
- C保护定义的宏
- linux内核.h文件中定义的宏
- 以前定义的宏在包含头文件后消失
- 在用户定义的宏中使用__FILE__和__LINE__
- 将定义的宏字符串转换为void*
- 如何在linux的makefile中使用头文件(.h)文件中定义的宏定义
- 使用编译器定义的宏连接
- 定义一个宏,然后取消定义之前未定义的宏
- C++ 从外部.cpp或 .hpp 定义的宏