我希望自动从.c和.h文件中删除所有尾随空格,以减少导致git历史中合并冲突的垃圾。
这能改变编译阶段的输出吗?或者自动完成这个任务是完全安全的?
发布于 2021-04-30 18:34:21
我能想到的唯一一种情况是,如果有一个以反斜杠结尾的宏,后面跟着空格,那么它的意义就会改变:
#define FOO bar\<space> 其中<space>表示空格字符。在修整之前,反斜杠会逃离空格,我不认为这有任何影响。但是,当您删除空格时,它会转义换行符,因此下一行将成为扩展的一部分。
由于没有理由编写这样的转义空间,这似乎是一个非常不可能的问题。事实上,如果有这样的代码,我认为更有可能的是他们打算编写一个多行扩展,而这个空间是偶然添加的。
在宏和字符串文本之外,所有空格序列都被视为单个空格,空格和换行符之间没有区别。
更新:
这个案子实际上不成立。C不允许字符串或字符文字之外的转义序列,而且只有换行符可以用反斜杠转义。GCC有一个扩展,将其作为一个转义换行符(万一程序员犯了我前面描述的错误),并且在执行时会打印警告。因此,删除空格将产生相同的结果,但消除警告。
https://stackoverflow.com/questions/67338800
复制相似问题