我正在尝试改进 this C code 的缩进.我对用于缩进的确切规则并不挑剔,我只关心它看起来或多或少是标准的!
有趣的是,代码在我的浏览器上看起来不错,但下载后很明显缩进是由“制表符”和“空格”混合引起的,而且在 SublimeText2 和 TextWrangler 上看起来都很丑。
我试过了
indent file.c
但它会返回一长串错误,这些错误似乎与字符串中存在反斜杠后跟换行符(如果斜杠需要转义则为“\\n”或“\\\n”)有关。所以我试着用
删除那些tr "\\\n" " " < file.c > newfile.c
但我并没有完全达到我的目标。
最佳答案
当我下载文件时,它有 CRLF(DOS 或 Windows 风格)行尾。当您通过 Unix indent
运行它时,它不喜欢反斜杠后跟 CR 而不是 NL(也称为 LF)。如果您替换 CRLF 行尾,它应该可以通过 indent
进行格式化。
问题是 indent
期望反斜杠后跟一个换行符,但 CR 不是换行符。
如果您有 dos2unix
或 dtou
命令,请使用它。如果没有,使用 tr
:
tr -d '\015' < 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
扩展名)和一些 header 。我用 uncrustify
戳了一下它没有问题;删除 CR 字符后,indent
也没有问题。
(我使用了我自己的 ule
— Uniform Line Endings — 程序来进行转换。这是许多不同的可能技术之一。)
请注意,您的 tr
命令失败,因为它将反斜杠和换行符都映射为空白(并保持 CR 字符不变),这不是您想要的。 tr
命令映射单个字符;它不适合根据您的需要映射字符组合。
关于c - C代码缩进练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38733322/