Pet*_*rta 204 language-agnostic coding-style eof
一些代码样式工具推荐这个,我记得看到一些unix命令行工具警告缺少空行.
有多余空行的原因是什么?
Ral*_*ach 163
如果文本文件中的最后一行数据未以换行符或回车符/新行组合终止,则许多旧工具行为不当.他们忽略该行,因为它以^ Z(eof)结束.
use*_*090 46
如果您尝试将两个文本文件连接在一起,如果第一个文本文件以换行符结尾,您会更高兴.
rsp*_*rsp 34
除了在文本编辑器中移动到文件末尾时它是一个更好的光标位置这一事实.
在文件末尾添加换行符可以简单地检查文件是否已被截断.
zwo*_*wol 22
这个问题以及大多数现有的答案似乎都基于一种误解。
\n通常称为“换行符”(U+000A 换行符,\\nC 语言)的ASCII 控制字符不会在(Unix 样式)文本文件中开始新行。它结束文本文件的当前行。如果文本文件的最后一个字符是 U+000A,则U+000A 和文件系统的 EOF 标记“之间”没有空行(但是这是实现的)。相反,如果(非空)文本文件的最后一个字符不是U +000A,则文件的最后一行尚未结束\xe2\x80\x94,则称其为“不完整”。
通过一些例子可能会更清楚:
\n该文件包含两行完整的文本。它不包含第三个空行。
\n$ printf 'first\\nsecond\\n' | xxd\n00000000: 6669 7273 740a 7365 636f 6e64 0a first.second.\nRun Code Online (Sandbox Code Playgroud)\n该文件包含第三个空行。
\n$ printf 'first\\nsecond\\n\\n' | xxd\n00000000: 6669 7273 740a 7365 636f 6e64 0a0a first.second..\nRun Code Online (Sandbox Code Playgroud)\n该文件只包含一个完整的行,加上第二个不完整的行。
\n$ printf 'first\\nsecond' | xxd\n00000000: 6669 7273 740a 7365 636f 6e64 first.second\nRun Code Online (Sandbox Code Playgroud)\n有时,不完整的最后一行就是您想要的\xe2\x80\x94,例如,在?>PHP 脚本的最后一行和 EOF 之间有一个换行符,可能会导致在错误的位置将额外的空格发送到渲染的 HTML 中(我会链接到具体的例子,但今天早上我没有运气找到一个)。因此,优秀的文本编辑器会在其 UI 中清楚地区分上述所有三种情况。
然而,旧的文本处理工具经常错误地处理不完整的最后几行。例如, 的某些实现wc不会将不完整的最后一行算作一行,而 的某些实现vi会默默地向不以 1 结尾的文件添加换行符,无论您是否愿意。因此,只有当您有特定原因需要时,才应使用不完整的最后几行。
(注:据我所知,我刚才所说的一切也适用于 DOS 风格的文本文件,其中两字节控制序列 U+000D U+000A 用于结束一行,而不仅仅是 U+000A。 )
\nt0m*_*13b 15
文件末尾出现空行,以便输入流的标准读取将知道何时终止读取,通常返回EOF以指示您已到达结尾.大多数语言都可以处理EOF标记.从那时起,在DOS下,EOF标记是F6键或Ctrl-Z,对于*nix系统,它是Ctrl-D.
大多数(如果不是全部)将实际读取到EOF标记,以便运行时库从输入读取的功能将知道何时停止进一步读取.当您打开追加模式的流时,它将擦除EOF标记并写过它,直到明确调用一个关闭它将在该点插入EOF标记.
较旧的工具期待一个空行,然后是EOF标记.如今,工具可以处理空行并忽略它.
小智 8
此外,当您修改文件并在文件末尾添加一些代码时 - diff(至少在标准配置中使用git diff)将显示您更改了最后一行,而您实际上只做了一件事 - 添加了换行符号.因此cvs报告变得不那么方便了.
| 归档时间: |
|
| 查看次数: |
35095 次 |
| 最近记录: |