11

我有一个讨厌的错字,浪费了我和我同事的时间,它是这样的:

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

首先,这很尴尬,第二件事,我不应该重复这件事。我对 C 比较陌生。在 Java 中,我想我可以使用FindBugs来捕获此类错误,我应该使用什么工具来处理 C 代码?皮棉?

4

11 回答 11

15

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

于 2008-10-15T18:45:24.717 回答
7

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

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

于 2008-10-15T18:49:23.023 回答
4

在我的脑海中,过去拯救了我的几件事:

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

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

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

  • 不要试图规避编译器或操作系统设置的任何保护措施。它们也可以让您轻松编程。

于 2008-10-15T18:52:45.887 回答
4

还看clang静态分析

于 2010-10-22T14:13:00.787 回答
3

我将从学习夹板gdb开始。如果您需要更高级的,请在这两个工具的基础上进行构建。但他们是一个好的开始。

于 2008-10-15T18:49:10.183 回答
2

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

于 2008-10-16T02:38:11.033 回答
0

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

于 2008-10-15T18:50:44.063 回答
0

一个好的语法高亮器会让一些这样的情况更加明显。

于 2008-10-15T19:28:15.533 回答
0

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

于 2010-07-19T15:31:16.877 回答
0

Programming Research的QA·C是另一个很好的C静态分析工具。

于 2011-07-29T20:37:19.843 回答
-1

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

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

“C 让你很容易射中自己的脚”

于 2008-10-15T18:56:36.550 回答