繁体   English   中英

检查宏内宏的定义

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM