我找到了一个简洁的Clang特有的功能,可以让你知道在实际包含它之前是否存在标题(__has_include
)。我试图想出自己的宏来做类似以下的事情:
#define DOES_HEADER_EXIST(_header_) \
#if !__has_include(_header_) \
#warning Header not found: _header_ \
#endif
但这似乎不起作用。我可以看出为什么这不起作用,因为它有点像要求预处理器做两次通过,但也许我错了?
答案 0 :(得分:5)
无法创建一个宏,该宏将扩展为预处理器指令,预处理器将实际执行该操作。
您的特定宏存在缺陷,因为如果编译器允许#if
后跟一个令牌,它会扩展为一条被认为是格式错误的#
指令的长行。不是一个宏参数。
要做你想做的事,你需要一个预处理器,在你真正编译代码之前注入你想要执行的测试。
答案 1 :(得分:2)
不幸的是,您可以在宏中使用宏,但不能使用预处理器关键字。