2

我正在准备一个说明来说服人们从 GCC2 切换到 GCC4(作为 C 编译器)是一个好主意。

特别是,我认为它可以揭示现有的错误。我想举一些例子,但作为一名 Java 程序员,我对这种情况的经验是有限的。一个例子是返回类型检查,我猜。

还有哪些令人信服的例子表明切换到现代编译器可以帮助发现 C 代码中存在的错误?

4

2 回答 2

0

我假设这些人有一段他们正在使用 gcc2 的特定代码。最好的办法可能是获取该代码并在 gcc4 中编译它,并打开所有可能的警告并比较差异。

gcc2 和 gcc4 之间的其他一些差异可能是:

  • 更好的编译时间(gcc4 可能更快)
  • 更好的代码运行时间(gcc4 更擅长优化,并且拥有 gcc2 出现时不存在的 CPU 架构知识)。
  • 更好的警告/错误消息
  • 我确信 gcc4 中有一些有趣的新 GNU C 扩展
于 2012-03-30T11:36:48.247 回答
0

好吧,一些在错误发现中非常有用的 gcc 选项:

  • -finstrument-functions- 帮助构建函数调用堆栈跟踪器。特别是在内置__builtin_return_address()范围仅限于当前功能的架构上。堆栈跟踪器以及使用链接-Map器选项生成的链接器符号文件是检测内存泄漏必不可少的工具(假设您开发的嵌入式系统无法运行 Valgrind 等)
  • -fstack-protector-all对于检测代码在缓冲区外的位置将字节写入内存的位置非常有用。所以这个选项检测缓冲区溢出类型的错误。

Errr ...只考虑这两个选项。可能还有更多我不知道的...

于 2012-03-30T11:29:44.440 回答