7

我目前正在学习 C++,因为我还在学习,所以我一直在犯错误。
对于像 C++ 这样宽松的语言,通常需要很长时间才能准确找出问题所在——因为编译器让我摆脱了很多。我意识到这种灵活性是 C++ 的主要优势之一,但它使学习基本语言变得困难。
是否有一些工具可以用来分析我的代码并根据最佳实践或只是明智的编码提出建议?最好作为 Eclipse 插件或 linux 应用程序。

4

8 回答 8

17

启用最大编译器警告(-Wall如果您使用的是 Gnu 编译器,这是该选项)。

“Lint”是典型的静态分析工具。

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

于 2009-02-13T16:44:40.740 回答
6

我认为你最好有一些关于良好实践以及它们为什么好的讲座。这应该比代码分析工具(至少在开始时)对您有所帮助。

我建议你阅读Effective C++系列和 **至少有效的 STL书籍。另请参阅权威 C++ 书籍指南和列表

于 2009-02-13T16:52:16.573 回答
5

对于 g++,除了打开 -Wall 之外,还要打开 -pedantic,并准备好对它发现的问题数量感到惊讶!

于 2009-02-13T16:49:31.697 回答
3

与 Java、C# 等相比,对 C++ 的工具支持相当糟糕,因为它没有上下文无关的语法。事实上,C++ 语法的某些部分是不可判定的。基本上,这意味着在句法级别理解 C++ 代码需要实现一个带有语义分析的编译器前端。C++ 不能独立于语义分析来解析为 AST,IDE 等中的大多数代码分析工具都在 AST 级别工作。这是为了换取 C++ 的灵活性和向后兼容性而做出的权衡的一部分。

于 2009-02-13T16:46:14.807 回答
3

打开所有编译器警告(至少在最初),然后了解它们的含义、如何解决突出显示的问题以及哪些警告代表编译器编写者可能认为模棱两可的真正构造,这是很好的第一步。

如果你需要更重的任务,如果你在Windows上,你可以试试 PC-Lint ,它仍然是 C++ 最好的 lint 工具之一。请记住,您需要配置这些工具以反映您的编码风格,否则您将被警告淹没,并且无法看到树木的树木。是的,它要花钱,而且如果你没有在“获得报酬”的水平上使用 C++,这可能有点矫枉过正,但我​​发现它非常宝贵。

于 2009-02-13T16:56:29.930 回答
3

维基百科上有静态代码分析工具列表。

但是警告通常是好的,但是使用 pedantic 和 Wall 启用所有警告的一个问题是您可能会从包含您无法控制的标题中获得的警告数量,这会产生很多噪音。我更喜欢编译我自己的软件并启用所有警告。当我在 linux 中编程时,我通常会这样做:

将我需要包含的外部头文件放在一个单独的文件中,并在该文件的开头包含放置:

#pragma GCC system_header

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

于 2009-02-15T21:58:06.823 回答
2

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

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

于 2009-02-13T16:45:06.450 回答
2

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

但是,它很难适应。您将不得不仅出于调试目的编写代码,例如在尚未调试的每一行之后编写检查,以确保结果符合预期,或者将值打印到控制台或消息框中,以便您自己检查它们。它很乏味,但可以让您在 IDE 内部或外部更轻松地发现错误。

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

于 2009-02-13T16:50:50.227 回答