C代码缩进练习

Exercise of indentation of C code

我正在尝试改进 this C code 的缩进。我对用于缩进的确切规则并不挑剔,我只关心它看起来或多或少是标准的!

有趣的是,代码在我的浏览器上看起来不错,但下载后很明显缩进是由 "tabs" 和 "spaces" 混合引起的,并且在 SublimeText2 和 TextWrangler 上看起来都很丑。

我试过了

indent file.c

但它 returns 一长串错误似乎与字符串中存在反斜杠后跟换行符(如果斜杠需要转义则为“\\n”或“\\\n”)有关.所以我试图删除那些

tr "\\n" " " < file.c > newfile.c

但我没有完全达到我的目标。

当我下载文件时,它有 CRLF(DOS 或 Windows 风格)行尾。当你 运行 通过 Unix indent 时,它不喜欢反斜杠后跟 CR 而不是 NL(又名 LF)。如果您替换 CRLF 行结尾,它应该可以按 indent.

格式化

问题是 indent 期望反斜杠后跟换行符,但 CR 不是换行符。

如果您有 dos2unixdtou 命令,请使用它。如果不是,请使用 tr:

tr -d '5' < sfs_code.c > x31; mv x31 sfs_code.c

您还可以通过将制表符替换为 8 个空格来进行改进。同样,可能还有其他工具可以完成这项工作,但经典工具是 pr:

pr -e8 -l1 -t sfs_code.c > x31; mv x31 sfs_code.c

用于将字符串拆分成多行的反斜杠换行序列是非常 1980 年代风格的编码。由于 C89/C90 标准引入了字符串连接,因此没有必要(尽管它仍然被认为是合法的 C)。

6781 行,这是一个相当大的文件。它包括许多其他源文件(.c 扩展名)和一些 headers。我用 uncrustify 戳了一下,没问题;删除 CR 字符后,indent 也很好。

(我使用自己的 ule — Uniform Line Endings — 程序来进行转换。这是许多不同的可能技术之一。)

请注意,您的 tr 命令失败,因为它将反斜杠和换行符都映射为空白(并保持 CR 字符不变),这不是您想要的。 tr 命令映射单个字符;它不适合映射您想要和需要的字符组合。