c - 从 .c/.h 源文件中去除尾随空格是否 100% 安全?
问题描述
我想自动删除 .c 和 .h 文件中的所有尾随空格,以减少导致 git 历史记录中合并冲突的垃圾等。
有什么可以想象的方法可以改变编译阶段的输出吗?或者自动执行此操作是否完全安全?
解决方案
我能想到的唯一可能改变含义的情况是,如果有一个以反斜杠后跟空格结尾的宏:
#define FOO bar\<space>
其中<space>
代表一个空格字符。在修剪之前,反斜杠会转义空格,我认为这没有任何影响。但是当您删除空格时,它会转义换行符,因此下一行将成为扩展的一部分。
由于没有理由编写这样的转义空间,这似乎是一个不太可能出现的问题。事实上,如果有这样的代码,我认为更有可能是他们打算写一个多行扩展,而空格是不小心添加的。
在宏和字符串文字之外,所有空格序列都被视为一个空格,空格和换行符之间没有区别。
更新:
这种情况实际上是无效的。C 不允许字符串或字符文字之外的转义序列,并且只有换行符可以用反斜杠转义。GCC 有一个扩展来将其视为转义换行符(以防程序员犯了我上面描述的错误),并且在执行此操作时会打印警告。因此,删除空格会产生相同的结果,但会消除警告。
推荐阅读
- android - MediaStore.ACTION_VIDEO_CAPTURE 未将完整字节写入文件
- conda - 如何解决安装 RosettaFold 期间出现的 UnsatisfiableError?
- javascript - 使用 JAVASCRIPT 将 CSV 转换为 JSON(作为电源自动化的一个步骤)
- terraform - Azurerm 后端无法与 Terraform Enterprise 一起使用,相同的代码在我的本地机器上运行并将状态存储在 blob 中。有什么具体的配置吗?
- stripe-payments - 付款时在控制台中出现 Stripe 错误
- graphics - OpenTK 黑三角?
- python - 在 Pandas 中按年份分组日期
- javascript - 如何优化 Nightwatch VRT 日志?
- javascript - 一个方法如何在 app.use() 中作为回调工作?
- c++ - 禁用鼠标/光标检测