执行缩进C代码

时间:2016-08-03 02:19:23

标签: c bash indentation

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

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

我试过

indent file.c

但是它会返回一系列错误,这些错误似乎与字符串中的存在反斜杠后跟换行符(“\\ n”或“\\\ n”,如果需要转义斜杠)相关。所以我试图用

删除那些
tr "\\\n" " " < file.c > newfile.c

但我没有达到目标。

1 个答案:

答案 0 :(得分:2)

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

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

如果您有dos2unixdtou命令,请使用该命令。如果没有,请使用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命令映射单个字符;它不适合映射你想要和需要的字符组合。