1

我发现了一个整洁的 Clang 特定功能,它可以让您在实际包含标头之前知道标头是否存在(__has_include)。我试图想出自己的宏来执行以下操作:

#define DOES_HEADER_EXIST(_header_)      \
#if !__has_include(_header_)             \
#warning Header not found: _header_      \
#endif

但这似乎不起作用。我可以明白为什么这不起作用,因为这有点像要求预处理器进行两次通过,但也许我错了?

4

2 回答 2

4

没有办法创建一个将扩展为预处理器指令的宏,预处理器将实际对其执行操作。

#if您的特定宏存在缺陷,因为如果编译器允许#后面跟一个不是宏参数的标记,它会扩展为一个长行,该行将被视为格式错误的指令。

为了做你想做的事,你需要一个预处理器,在你实际编译代码之前注入你想要执行的测试。

于 2013-05-31T20:49:52.580 回答
2

不幸的是,您可以在宏中使用宏,但不能使用预处理器关键字。

于 2013-05-31T20:48:52.703 回答