[英]Check for a definition of a macro inside a macro
假设我有这个代码:
#define NAME MY_APP
#define ENABLE NAME ## _ENABLE
我想检查是否定义了ENABLE
扩展到的宏,即是否定义了MY_APP_ENABLE
。 这可能使用C宏吗?
不。特别是,建议
#ifdef NAME ## _ENABLE
根据6.10.3.4重新扫描和进一步更换 ,这说不起作用
生成的完全宏替换的预处理标记序列不会被重新处理为预处理指令,即使它类似于1,但其中的所有编译指示一元运算符表达式将按照下面的6.10.9中的规定进行处理。
您可以使用defined
的构造来检查是否defined
了宏,但只能在预处理器表达式中使用它。 可以编写一个扩展到此构造的宏。 例如:
#define MY_APP_ENABLED
#define IS_DEFINED(x) defined(x ## _ENABLED)
#if IS_DEFINED(MY_APP)
#error "YES"
#else
#error "NO"
#endif
以上将在编译时发出YES
。 如果MY_APP_ENABLED
,则将发出NO
。
更新:当NAME定义为MY_APP时,以下版本将起作用。 间接性的额外级别允许NAME
扩大到MY_APP
之前,它与串联_ENABLED
:
#define MY_APP_ENABLED
#define IS_DEFINED0(x) defined(x ## _ENABLED)
#define IS_DEFINED(x) IS_DEFINED0(x)
#define NAME MY_APP
#if IS_DEFINED(NAME)
#error "YES"
#else
#error "NO"
#endif
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.