从 .c/.h 源文件中去除尾随空格是否 100% 安全?

Is it 100% safe to strip trailing whitespace from .c/.h source files?

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

有什么可以想象的方式可以改变编译阶段的输出吗?还是自动执行此操作绝对安全?

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

#define FOO bar\<space> 

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

因为没有理由像那样写一个转义的space,这似乎是一个不太可能出现的问题。事实上,如果有这样的代码,我认为他们更有可能打算编写多行扩展,并且 space 是偶然添加的。

在宏和字符串字面量之外,白色space的所有序列都被视为单个space,并且space和换行之间没有区别。

更新:

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