C2x, 6.10.2 源文件包含, 语义, 2 (着重号添加):
表单的预处理指令
# include " q-char-sequence " new-line
导致将该指令替换为由 " 分隔符之间的指定序列标识的源文件的全部内容。
C2x, 6.4.7 标头名称, 语法, 1:
header-name: < h-char-sequence > " q-char-sequence "
如果q-char-sequence
是关于源文件的,那么为什么语法没有source-file-name
?
这意味着每个语法"x.c"
、"x.h"
、<x.c>
和<x.h>
都是header-name
。有点困惑。
语法不可能写出来
header-name: < source-file-name > | " source-file-name "
source-file-name: h-char-sequence | q-char-sequence
因为这将允许任一类型的字符序列与任一类型的分隔符一起使用,这是不正确的,因为序列不同。 H-char-序列不允许>
,Q-char-序列不允许"
。
如果这不是你的问题,那么我不明白你想知道什么。
语法仅将h-char-sequence
和q-char-sequence
定义为字符序列。由实现来说明哪些序列是有效的以及如何解释它们。标准仅添加了以下约束:
#include
指令应标识可由实现处理的头文件或源文件。
因此,使用不会识别正确文件的序列应该会引起编译错误。
语义部分增加了另一个要求 §5:
实现应为由一个或多个非数字组成的序列提供唯一的映射 或数字 (6.4.2.1),后跟句点 (.) 和单个非数字。第一个字符不得是 数字。该实现可能会忽略字母大小写的区别,并将映射限制为 句号前的八个重要人物。
这可确保实现能够接受标准名称(如stdio.h
),并且必须接受名称为foo.h
的文件,前提是它映射到具有正确格式的现有文件。