【问题标题】:Is there a way to use a preprocessor macro inside of another function-like macro?有没有办法在另一个类似函数的宏中使用预处理器宏?
【发布时间】:2013-05-31 19:46:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: c macros clang c-preprocessor


    【解决方案1】:

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

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

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

    【讨论】:

    • 该死。谢谢你的解释。
    【解决方案2】:

    很遗憾,您可以在宏中使用宏,但不能使用预处理器关键字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-08
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 2010-10-13
      • 2015-11-03
      相关资源
      最近更新 更多