C 有没有办法在另一个函数(如宏)中使用预处理器宏?

C 有没有办法在另一个函数(如宏)中使用预处理器宏?,c,macros,clang,c-preprocessor,C,Macros,Clang,C Preprocessor,我发现了一个整洁的特定于叮当声的特性,它可以让您知道在实际包含标题之前是否存在它。我试图想出自己的宏来执行以下操作: #define DOES_HEADER_EXIST(_header_) \ #if !__has_include(_header_) \ #warning Header not found: _header_ \ #endif 但这似乎不起作用。我可以理解为什么这不起作用,因为这有点像要求预处理器进行两次传递,但也许我错了 不幸的是,

我发现了一个整洁的特定于叮当声的特性,它可以让您知道在实际包含标题之前是否存在它。我试图想出自己的宏来执行以下操作:

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

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

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

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

无法创建将扩展为预处理器实际执行操作的预处理器指令的宏

您的特定宏是有缺陷的,因为如果编译器允许后面跟一个不是宏参数的标记,那么它会扩展成一个长行,被认为是格式错误的if指令


要执行您想要的操作,您需要一个预处理器,该预处理器在实际编译代码之前注入您想要执行的测试。

无法创建一个宏,该宏将扩展为预处理器实际执行操作的预处理器指令

您的特定宏是有缺陷的,因为如果编译器允许后面跟一个不是宏参数的标记,那么它会扩展成一个长行,被认为是格式错误的if指令


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

Darn。谢谢你的解释,该死的。谢谢你的解释。