【发布时间】:2015-03-04 10:04:08
【问题描述】:
在扩展宏之前是否处理了预处理器指令?
谢谢
【问题讨论】:
标签: c++ c-preprocessor preprocessor-directive
在扩展宏之前是否处理了预处理器指令?
谢谢
【问题讨论】:
标签: c++ c-preprocessor preprocessor-directive
是和不是。每个预处理器指令都定义了自己与宏替换的交互。一般规则是(C++11 16/6):
预处理指令中的预处理标记不受宏扩展的影响,除非另有说明 声明。
另一个相关的一般规则是 16/1:
预处理指令由满足以下约束的预处理标记序列组成: 序列中的第一个标记是
#预处理标记(在翻译阶段 4 开始时)是 源文件中的第一个字符(可选地在不包含换行符的空格之后)或 跟在包含至少一个换行符的空格之后。序列中的最后一个标记是第一个换行符 序列中第一个标记之后的字符。换行符结束预处理 指令,即使它出现在调用类似函数的宏中。
(翻译阶段 4 是预处理)。
个别指令的一些规则:
#if 和 #elif 在其参数中扩展宏,defined (16.1/4) 的参数除外。
#include 在其参数中扩展宏;它们最终必须扩展为由"" 或<> 分隔的字符串。
#line 在其参数中扩展宏;它们最终必须扩展到 #line (16.4/5) 的非宏参数的有效语法
【讨论】: