2008-10-15 59 views
11

我有这样浪费我的时间和我的同事的时候讨厌错字,它是这样的:任何工具来捕捉C代码中的愚蠢错误?

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

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

+3

另一个很好的静态分析工具,我们已经与这里使用棒球棒了巨大的成功。在我们发现第一个愚蠢的错误之后,他们往往不会再犯另一个错误! – Danimal 2008-10-15 18:46:00

+0

啊,分号问题是一个反复出现的问题。多一个,缺少一个;没什么区别。他们都会导致相同的痛苦屁股搜索,这将永远需要并导致“Doh!”和一巴掌。我每隔一段时间都会有它。 – 2008-10-15 20:00:03

+0

您可能想要指定平台。并非所有工具都能在所有平台上保持不变。 – 2010-07-19 15:40:19

回答

15

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

+1

但是,如果代码库是任何类型的大小并且尚未被分割,请准备好一大堆警告。 – 2008-10-15 18:47:33

+1

对很多警告都是正确的 - 但它们都可以单独配置。所以你可以关掉任何你需要的东西。 – 2008-10-16 12:08:38

+0

我发现PC-lint的警告充其量并且模糊不清。 – 2009-01-06 22:13:32

3

我会从了解splintgdb开始。如果你需要更高级的话,建立在这两个工具上。但他们是一个好的开始。

7

除了Lykathea's PC-Lint suggestion之外,如果碰到编译器的警告级别,也可以得到更好(或至少更多)的诊断。类似/W4-Wall

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

0

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

4

已经救了我的过去,从我的头顶有几件事情:

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

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

  • 使用断言当你可以和防守编程。要尽早让你的程序失败,你会看到这样的弱点。

  • 不要试图绕过编译器或操作系统所采取的任何安全措施。他们在那里为您的编程方便。

-1

How to Shoot Yourself In the Foot此(旧)版本,并在网络上许多其他版本,Ç始终是允许的最简单的程序语言。当编程在C,你必须记住这一点,并小心。如果您想要保护,请选择其他语言。

这句话是attributed Bjarne Stroustrup(C++)自己。为了(MIS)报价:

“C可以很容易地拍摄自己的脚”

0

一个好的语法高亮会做出一些类似案例,更为明显。

0

我建议看看你是否有能力enforce MISRA standards。它们的编写经过深思熟虑以及编译器检查很简单的许多规则。例如,我使用的规则要求所有NOP命令都有自己的行。这意味着当你把一个;在循环语句结束时,它会通过一个错误说它不在它自己的行上。

0

QA·C通过编程研究是C.