任何捕捉C代码中愚蠢错误的工具?

我有一个令人讨厌的拼写错误浪费了我的时间和我的同事的时间,它是这样的:

for (i = 0; i < blah; i++); // <- I had a semi-colon here, that's the bug! { // Some awesome logic here } 

首先,这是非常尴尬的,其次,我不应该重复这一点。 我对C相对较新。在Java中,我想我可以使用FindBugs来捕获这些错误,我应该使用什么工具来代码? 皮棉?

是的, PC-Lint可能是最好的工具。

除了Lykathea的PC-Lint建议之外 ,如果提高编译器的警告级别,您还可以获得更好(或至少更多)的诊断。 像/W4-Wall这样的东西

虽然我不确定你的特定问题是否会被捕获(即使启用了所有警告,MS VC也似乎没有标记它)。 我认为这是因为当作为循环控制表达式的副作用完成工作时, for循环不是一个不常见的习惯用法。

过去从我的头脑中拯救了我的一些事情:

  • 使用if (3 == bla)而不是(bla == 3) ,因为如果你拼错并输入(3 = bla),编译器会抱怨。

  • 使用all-warnings开关。 你的编译器应该警告你这样的空语句。

  • 尽可能使用断言并进行防御性编程。 尽力使你的程序尽早失败,你会看到这样的弱点。

  • 不要试图绕过编译器或操作系统已经实施的任何安全措施。 它们也是为了方便您的编程而存在的。

还要看铿锵静态分析

我将从了解splint和gdb开始 。 如果您需要更高级,请在这两个工具的基础上构建。 但他们是一个良好的开端。

GCC具有Lint通过警告标志内置的大部分function。

像Eclipse这样的任何良好的GUI编程环境(“IDE” – 集成开发环境)都会在这种情况下生成警告。

一个好的语法高亮显示器会使这样的一些案例更加明显。

我建议你看看你是否有能力执行MISRA标准 。 它们是经过深思熟虑和许多规则编写的,这些规则对于编译器来说很容易检查。 例如,我使用的规则要求所有NOP命令都有自己的行。 这意味着当你放一个; 在循环语句结束时,它将通过一个错误说明它不在它自己的行上。

编程研究的QA·C是C的另一个很好的静态分析工具。

在这个(旧的) 如何在脚中拍摄自己的版本,以及在网络上的许多其他版本中, C始终是允许最简单程序的语言。 用C语言编程时,你必须记住这一点并小心。 如果您需要保护,请选择其他语言。

这句话归功于 Bjarne Stroustrup(C ++)本人。 致(错)引用:

“C让你很容易在脚下射击”