显示如何切换到现代C编译器的示例可以帮助发现错误?

时间:2012-03-30 07:37:35

标签: c gcc gcc4 gcc3

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我认为这些人有一段特殊的代码,他们正在使用gcc2。最好的办法可能是只需要接受该代码并在gcc4中编译它并打开所有可能的警告并比较差异。

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

  • 更好的编译时间(gcc4可能更快)
  • 更好的代码运行时间(gcc4更擅长优化,并且具备在gcc2出现时不存在的CPU架构知识)。
  • 更好的警告/错误消息
  • 我确信gcc4中有一些有趣的新GNU C扩展