2009-02-13 128 views
7

我目前正在学习C++,因为我还在学习,所以我一直在犯错误。
使用C++这种宽容的语言,通常需要很长时间才能弄清楚究竟发生了什么问题 - 因为编译器让我可以逃脱很多。我意识到这种灵活性是C++的主要优势之一,但是它使得很难学习基本语言。
有没有一些工具可以用来分析我的代码,并根据最佳实践或只是合理的编码提出建议?最好作为Eclipse插件或Linux应用程序。C++代码分析工具

回答

17

启用最大编译器警告(如果您使用Gnu编译器,则为-Wall选项)。

'Lint'是一个典型的静态分析工具。

valgrind是一个很好的运行时分析器。

+2

valgrind +1。它发现了许多新手可以忽略的错误。 – ypnos 2009-02-13 17:06:22

+0

针对lint的+1,如此神奇的工具 – JaredPar 2009-02-13 17:11:18

+1

请注意,大多数lint版本都是针对C编写的,而且对于C++来说是非常没用的。 Gimple PC-Lint是个例外。 – 2009-02-15 22:24:59

2

棉绒 - 有很多版本,但如果你谷歌皮棉你应该找到一个工作。另一件事是打开你的编译器警告 - 如果你使用gcc/g ++,选项是-Wall。

您可能会发现CppChecker作为支持gcc/PC lint的Eclipse插件很有用。

3

与Java,C#等相比,C++的工具支持相当糟糕,因为它没有上下文无关语法。事实上,C++语法的一部分是不可判定的。基本上,这意味着在语法层面理解C++代码需要用语义分析来实现一个编译器前端。 C++不能独立于语义分析而被解析为AST,并且IDE中的大多数代码分析工具等工作在AST级别。这是您为了交换C++的灵活性和向后兼容性而进行的折衷的一部分。

5

对于g ++,以及打开-Wall,也打开-pedantic,并准备惊奇发现的问题数量!

2

我认为你真正需要在这里学习的是如何在IDE之外进行调试。在我看来,这是一项非常有价值的技能,因为您不再需要这么庞大的工具集来开发软件,而且它将适用于您已知并将学习的绝大多数语言。

但是,它很难适应。您只能为了调试目的而编写代码,例如在每行还没有调试之后写入检查,以确保结果符合预期,或将值打印到控制台或消息框中,以便您可以自行检查它们。它的单调乏味,但可以让你在IDE内部或外部更容易地接受错误。

下载并尝试一些免费的调试工具,如GDB,它们可以帮助您探测内存等,而无需编写自己的代码。

3

打开所有编译器警告(至少在开始时),然后理解它们的含义,如何解决突出显示的问题以及哪些警告代表编译器编写者可能认为不明确的真正构造是一个好的第一步。

如果你需要更重的东西,你可以试试PC-Lint,如果你使用的是Windows,它仍然是C++最好的皮棉工具之一。请记住,您需要配置这些工具以反映您的编码风格,否则您会被警告吞噬,无法看到树木。是的,这需要花钱,如果你没有在C++上“获取报酬”级别,这可能有点矫枉过正,但我​​觉得它非常宝贵。

3

wikipedia有静态代码分析工具列表。

但是警告通常不错,但启用迂腐和Wall的所有警告的一个问题是您可能从包含无法控制的标题中获得的警告数量,这可能会产生很多噪音。尽管如此,我更愿意编辑我自己的软件并启用所有警告。正如我在linux程序中,我通常会做这样的:

把我需要在一个单独的文件,包括外部头,并在该文件的开始之前,包括提出:

#pragma GCC system_header 

然后包括这个文件来自你的代码。这使您可以查看自己代码中的所有警告,而不会将其从外部代码警告中淹没。缺点是它是一个gcc特定的解决方案,我不知道任何平台独立的解决方案。