【问题标题】:Are preprocessor directives processed before macros are expanded?是否在扩展宏之前处理预处理器指令?
【发布时间】:2015-03-04 10:04:08
【问题描述】:

在扩展宏之前是否处理了预处理器指令?

谢谢

【问题讨论】:

    标签: c++ c-preprocessor preprocessor-directive


    【解决方案1】:

    是和不是。每个预处理器指令都定义了自己与宏替换的交互。一般规则是(C++11 16/6):

    预处理指令中的预处理标记不受宏扩展的影响,除非另有说明 声明。

    另一个相关的一般规则是 16/1:

    预处理指令由满足以下约束的预处理标记序列组成: 序列中的第一个标记是 # 预处理标记(在翻译阶段 4 开始时)是 源文件中的第一个字符(可选地在不包含换行符的空格之后)或 跟在包含至少一个换行符的空格之后。序列中的最后一个标记是第一个换行符 序列中第一个标记之后的字符。换行符结束预处理 指令,即使它出现在调用类似函数的宏中。

    (翻译阶段 4 是预处理)。

    个别指令的一些规则:

    • #if 和 #elif 在其参数中扩展宏,defined (16.1/4) 的参数除外。

    • #include 在其参数中扩展宏;它们最终必须扩展为由"" 或<> 分隔的字符串。

    • #line 在其参数中扩展宏;它们最终必须扩展到 #line (16.4/5) 的非宏参数的有效语法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      相关资源
      最近更新 更多