翻译阶段2的第二部分(N3485中的2.2.2节)基本上说,如果源文件没有以换行符结尾,编译器应该把它当作换行符。
但是,如果我正确地阅读了它,它会对空源文件做出一个显式的例外,这些源文件仍然是空的。
确切的案文(并增加了重点)是:
每一个反斜杠字符(
\)的实例后面紧跟一个新行字符,将物理源行拼接成逻辑源行。只有任何物理源线上的最后一个反斜线才有资格成为这种拼接的一部分。因此,如果生成与通用字符名称语法相匹配的字符序列,则该行为未定义。不为空且不以新行字符结尾的源文件,或在进行任何此类拼接之前以新行字符结尾,或在紧接反斜杠字符之前以新行字符结尾的源文件,应被处理为附加到文件中的新行字符。
在任何情况下,源文件是空的还是仅由换行符组成,我都找不出有什么区别。
我希望有人能对这一要求背后的理由有所了解。
发布于 2013-02-20 00:15:12
我认为源文件通常由零行或更多行组成,每一行由一系列非新行字符组成,后面是一条新行。任何不符合这一要求的源文件都需要特殊处理(这样就不会从两个不同的源文件中得到由文本组成的行)。
一个空的C++源文件并不特别有用,但是禁止它是没有意义的。引用的子句并不是要区分一个空文件和一个只包含一个新行的文件(它们之间不应该有真正的区别)。
发布于 2013-02-20 00:14:47
这是为了特别支持1994年在国际混淆C代码竞赛中获胜的“最坏的滥用规则”类别:世界上最小的自我复制程序。有保证。
发布于 2013-02-20 00:34:14
我猜这意味着每一行都以\n结尾,而空文件没有行
https://stackoverflow.com/questions/14969771
复制相似问题