首页 > 解决方案 > 从 .c/.h 源文件中去除尾随空格是否 100% 安全?

问题描述

我想自动删除 .c 和 .h 文件中的所有尾随空格,以减少导致 git 历史记录中合并冲突的垃圾等。

有什么可以想象的方法可以改变编译阶段的输出吗?或者自动执行此操作是否完全安全?

标签: cwhitespaceremoving-whitespacetrailing-whitespace

解决方案


我能想到的唯一可能改变含义的情况是,如果有一个以反斜杠后跟空格结尾的宏:

#define FOO bar\<space> 

其中<space>代表一个空格字符。在修剪之前,反斜杠会转义空格,我认为这没有任何影响。但是当您删除空格时,它会转义换行符,因此下一行将成为扩展的一部分。

由于没有理由编写这样的转义空间,这似乎是一个不太可能出现的问题。事实上,如果有这样的代码,我认为更有可能是他们打算写一个多行扩展,而空格是不小心添加的。

在宏和字符串文字之外,所有空格序列都被视为一个空格,空格和换行符之间没有区别。

更新:

这种情况实际上是无效的。C 不允许字符串或字符文字之外的转义序列,并且只有换行符可以用反斜杠转义。GCC 有一个扩展来将其视为转义换行符(以防程序员犯了我上面描述的错误),并且在执行此操作时会打印警告。因此,删除空格会产生相同的结果,但会消除警告。


推荐阅读