首页 > 解决方案 > C++ 标头单元导入语法

问题描述

在当前的 C++ 草案(2019 年 8 月)中,pp-import http ://eel.is/c++draft/cpp.import#nt:pp-import 的语法允许pp-tokensheader-nameheader-name-tokens.

该部分的当前版本是P1703: "Recognizing Header Unit Imports Requires Full Preprocessing"的结果。在此提议引起的更改之前,语法仍然允许在或之后预处理标记标记,但以 a 的形式。(P1103 的 [ cpp.module ] 部分)。header-nameheader-name-tokenspp-import-suffix

在这种情况下允许额外的、未使用的预处理令牌背后的原因是什么?

谢谢你。

标签: c++language-lawyerc++20c++-modules

解决方案


它们在那里允许属性。

阶段 7(解析和语义分析)语法没有改变。导入时仍允许使用属性。以前,阶段 4(预处理器)语法试图限制更多允许作为导入的内容,以强制执行以下规则:

只有当翻译阶段 4 产生的令牌序列直到导入令牌形成一个导入序列,并且导入令牌不在另一个的 header-name-tokens 或 pp-import-suffix 内时,才会识别 pp-import pp-进口。

新规则进一步限制了它,每行不允许超过一个导入,因此不再需要此规则及其相关语法。


推荐阅读