我假设这里的每个人都熟悉所有文本文件应以换行符结尾的格言。 多年来我一直都知道这个“规则”,但我一直在想 - 为什么?
#1楼
我总是认为规则来自于解析没有结束换行符的文件很困难的日子。 也就是说,您最终会编写代码,其中行结束由EOL字符或EOF定义。 假设以EOL结束的行更简单。
但是我认为该规则源自需要换行的C编译器。 正如“文件末尾没有换行”编译器警告所指出的那样,#include不会添加换行符。
#2楼
这个答案是尝试技术答案而不是意见。
如果我们想成为POSIX纯粹主义者,我们将一行定义为:
一系列零个或多个非<newline>字符加上一个终止<newline>字符。
资料来源: https : //pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_206
一条不完整的行:
文件末尾的一个或多个非<newline>字符的序列。
资料来源: https : //pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_195
文本文件为:
包含组织为零行或多行的字符的文件。 这些行不包含NUL字符,长度不能超过{LINE_MAX}个字节,包括<newline>字符。 尽管POSIX.1-2008不区分文本文件和二进制文件(请参阅ISO C标准),但许多实用程序在操作文本文件时仅产生可预测或有意义的输出。 具有此类限制的标准实用程序始终在其STDIN或INPUT FILES部分中指定“文本文件”。
资料来源: https : //pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_397
字符串为:
由第一个空字节终止并包括第一个空字节的连续字节序列。
资料来源: https : //pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_396
从这以后,我们可以得出的唯一一次,我们将有可能遇到什么类型的问题是,如果我们处理一个行的文件或文件为文本文件 (是一个文本文件是零的组织概念或更多行,我们知道的行必须以<newline>结束。
例证: wc -l filename
。
从wc
的手册中我们读到:
行被定义为由<newline>字符分隔的字符串。
对JavaScript,HTML和CSS文件有什么影响,那么它们是文本文件?
在浏览器,现代IDE和其他前端应用程序中,在EOF中跳过EOL没有问题。