引言
在C++标准草案中:
有提到这些术语import-keyword,module-keyword和,export-keyword。
混乱
在语法部分,我不太确定怎么会像A.1一般情况那样
“这里描述的语法接受一组有效的C++结构。”
这些语法似乎不是在附录中定义的。
问题
它可能是这里地址
4在pp-import的所有三种形式中,导入和导出(如果存在)预处理令牌分别替换为导入关键字和导出关键字预处理标记。
但我不知道这在语法上意味着什么..。那是什么意思?
相关
一些相关的语法在这里(希望我可以帮助某人获得必要的信息,而不必去所有的标准)。
preprocessing-token:
header-name
import-keyword
module-keyword
export-keyword
identifier
pp-number
character-literal
user-defined-character-literal
string-literal
user-defined-string-literal
preprocessing-op-or-punc
each non-whitespace character that cannot be one of the above keyword:
any identifier listed in Table 5
import-keyword
module-keyword
export-keyword module-import-declaration:
import-keyword module-name attribute-specifier-seqopt ;
import-keyword module-partition attribute-specifier-seqopt ;
import-keyword header-name attribute-specifier-seqopt ;control-line:
# include pp-tokens new-line pp-import
# define identifier replacement-list new-line
# define identifier lparen identifier-listopt ) replacement-list new-line
# define identifier lparen ... ) replacement-list new-linepp-import:
exportopt import header-name pp-tokensopt ; new-line
exportopt import header-name-tokens pp-tokensopt ; new-line
exportopt import pp-tokens ; new-line发布于 2020-11-28 14:49:54
你有所有的作品,只是看得不对。可能是因为“关键字”这个词。
因此,让我们从pp-import不是语法的一部分开始。这实际上不是C++语法本身;它以"pp“开头,因为它是预处理器的一部分。预处理器是在将C++语法的其余部分应用于文本之前发生的事情。
因此,pp-import是一个预处理指令,非常类似于宏定义(就像module-file及其衍生物一样)。预处理器指令通常控制为C++生成的令牌序列,模块预处理器指令也没有不同。
第[cpp.import]节定义了pp-import的外观和它生成的标记。因此,在预处理之前,您将得到如下所示的一系列文本:import "some_module.name"。当预处理程序将此文本识别为pp-import时,它将生成令牌序列import-keyword "some_module.name"。
import-keyword是特定令牌的名称,就像if或struct一样。但是与大多数这样的标记不同,这个令牌没有文本模拟。也就是说,if是编译器在代码中看到文本"if“时生成的关键字。import-keyword的情况并非如此。此令牌仅由C++预处理程序生成,并且仅由pp-import预处理指令生成。
因此,预处理指令pp-import基本上将“导入”文本替换为import-keyword令牌。并且主C++语法识别import-keyword令牌,即使您不能为该令牌编写文本。
但是..。为什么?为什么你不能输入这些预处理指令和关键字呢?为什么不让import和module像其他关键字一样工作呢?
有两个原因。
module-keyword和import-keyword,这些指令之外的“模块”和“导入”的任何使用都允许它们只是标识符。因此,C++20不会破坏成堆的代码。
或者你宁愿写co_module ;)https://stackoverflow.com/questions/65047031
复制相似问题