c语言 - 如果 q-char-sequence 是关于源文件的,那么为什么语法没有源文件名?



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-sequenceq-char-sequence定义为字符序列。由实现来说明哪些序列是有效的以及如何解释它们。标准仅添加了以下约束:

#include指令应标识可由实现处理的头文件或源文件。

因此,使用不会识别正确文件的序列应该会引起编译错误。

语义部分增加了另一个要求 §5:

实现应为由一个或多个非数字组成的序列提供唯一的映射 或数字 (6.4.2.1),后跟句点 (.) 和单个非数字。第一个字符不得是 数字。该实现可能会忽略字母大小写的区别,并将映射限制为 句号前的八个重要人物。

这可确保实现能够接受标准名称(如stdio.h),并且必须接受名称为foo.h的文件,前提是它映射到具有正确格式的现有文件。

相关内容

  • 没有找到相关文章

最新更新