我正在努力改进this C code的缩进。我对于缩进的确切规则并不挑剔,我只关心它看起来像或多或少的标准!
有趣的是,代码在我的浏览器上看起来不错,但是一旦下载,很明显缩进是由“tabs”和“spaces”的混合引起的,并且在SublimeText2和TextWrangler上看起来都很难看。
我试过
indent file.c
但是它会返回一系列错误,这些错误似乎与字符串中的存在反斜杠后跟换行符(“\\ n”或“\\\ n”,如果需要转义斜杠)相关。所以我试图用
删除那些tr "\\\n" " " < file.c > newfile.c
但我没有达到目标。
答案 0 :(得分:2)
当我下载文件时,它有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
用于在多行上分割字符串的反斜杠换行序列是20世纪80年代风格的编码。由于C89 / C90标准引入了字符串连接,因此没有必要(尽管它仍然被认为是合法的C)。
在6781行,这是一个非常大的文件。它包含许多其他源文件(.c
扩展名)和一些标头。我用它uncrustify
戳了戳它没有问题;删除CR字符后,indent
也很好。
(我使用自己的ule
- Uniform Line Endings - 程序进行转换。这是许多不同技术之一。)
请注意,您的tr
命令失败,因为它将反斜杠和换行符都映射为空白(并保持CR字符不变),这不是您想要的。 tr
命令映射单个字符;它不适合映射你想要和需要的字符组合。