程序翻译方向是否明确?

Is program translation direction well-defined?

这听起来很明显,但只是出于好奇:程序翻译方向是否定义明确(即 top-to-bottom, left-to-right)?标准中有明确定义吗?

源文件,以及通过 #include 指令包含 headers 产生的翻译单元,隐式地是一维字符序列。我没有看到标准中明确说明了这一点,但是标准中有很多对这个维度的引用,指的是字符“后跟”(C 2018 5.1.1.2 1 1) 或“之前”(6.10.2 5) 其他字符、作用域在标记或声明符出现“之后”开始 (6.2.1 7),等等。

编译器可以自由地以任何顺序读取和计算翻译单元的各个部分,但翻译单元的含义是根据此 start-to-finish 顺序定义的。

行与行之间没有“上”或“下”。行在 C 翻译的某些部分是有意义的,例如预处理指令以 new-line 字符结尾。但是,不同行上的相同列之间没有定义任何关系,因此该标准没有定义任何有意义的行上升或下降的事实,这意味着在字符流中来回移动一定数量。

标准确实允许源文件可能由文本行组成,可能是 Hollerith 卡片(穿孔卡片),其中每张卡片是一行,或者 fixed-length-record 文件,其中每条记录是一条固定字节数(例如 80)并且没有 new-line 个字符物理记录在文件中。 (隐含地,每行文本在 80 个字符后结束。)标准将这些文件视为在行尾插入 new-line 字符 (5.2.1 3),从而有效地将文件转换为单个字符流。