我正在准备一个说明来说服人们从 GCC2 切换到 GCC4(作为 C 编译器)是一个好主意。
特别是,我认为它可以揭示现有的错误。我想举一些例子,但作为一名 Java 程序员,我对这种情况的经验是有限的。一个例子是返回类型检查,我猜。
还有哪些令人信服的例子表明切换到现代编译器可以帮助发现 C 代码中存在的错误?
我假设这些人有一段他们正在使用 gcc2 的特定代码。最好的办法可能是获取该代码并在 gcc4 中编译它,并打开所有可能的警告并比较差异。
gcc2 和 gcc4 之间的其他一些差异可能是:
好吧,一些在错误发现中非常有用的 gcc 选项:
-finstrument-functions
- 帮助构建函数调用堆栈跟踪器。特别是在内置__builtin_return_address()
范围仅限于当前功能的架构上。堆栈跟踪器以及使用链接-Map
器选项生成的链接器符号文件是检测内存泄漏必不可少的工具(假设您开发的嵌入式系统无法运行 Valgrind 等)-fstack-protector-all
对于检测代码在缓冲区外的位置将字节写入内存的位置非常有用。所以这个选项检测缓冲区溢出类型的错误。Errr ...只考虑这两个选项。可能还有更多我不知道的...