c - C代码缩进练习

标签 c bash indentation

我正在尝试改进 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 不是换行符。

如果您有 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

用于将字符串拆分为多行的反斜杠换行序列是非常 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/

相关文章:

c++ - 使用 DialogBoxIndirect 时,如何获取用户在对话框关闭时输入的文本?

bash - 从远程服务器调用的脚本无法正确运行服务

python - 需要编写一个 bash 脚本来 ssh 到许多 UNIX 机器上,运行一个 python 脚本并将结果推送到 GitHub

javascript - 使用内联 JavaScript 在 emacs 中缩进 html

c - 如何使用动态内存分配对矩阵执行不同的操作?

c++ - 头文件和库文件有什么区别?

c - 构建的库目录未添加到 libtool 包装器脚本中的 LD_LIBRARY_PATH

python - 将输入管道输入到脚本,然后从用户那里获取输入

r - 缩进使用 R-ReporteRs 制作的 Flextable

language-agnostic - 在切换中缩进大小写的首选方式是什么?