我们生产中的一些构建系统没人关心,这些机器运行的是GCC 3或GCC 2等古老版本的GCC。
而且我不能说服管理层将其升级到最新版本:他们说,“如果还没有破产,就不要修复它”。
由于我们维护了非常古老的代码库(写于80年代),因此C89代码在这些编译器上可以很好地进行编译。
但是我不确定使用这些旧内容是个好主意。
我的问题是:
使用旧的C编译器会损害已编译程序的安全性吗?
更新:
Visual Studio 2008为Windows目标构建了相同的代码,MSVC尚不支持C99或C11(我不知道是否有更新的MSVC支持),并且可以使用最新的GCC在Linux机器上构建它。因此,如果我们只使用更新的GCC,它的构建可能会和以前一样好。
-O3 -Wall -Wextra -fsanitize=undefined
现代gcc和clang 所发现的任何问题应该会有所帮助。