我目前正在学习C++,由于还在学习阶段,所以经常犯错误。
由于C++是一种非常宽容的语言,因此往往需要花费很长时间才能确定问题所在——因为编译器让我得以逃脱很多错误。我意识到这种灵活性是C++的主要优势之一,但它也使得基础语言的学习变得困难。
是否有一些工具可以分析我的代码,并根据最佳实践或合理编码提出建议?最好作为Eclipse插件或Linux应用程序。
我目前正在学习C++,由于还在学习阶段,所以经常犯错误。
由于C++是一种非常宽容的语言,因此往往需要花费很长时间才能确定问题所在——因为编译器让我得以逃脱很多错误。我意识到这种灵活性是C++的主要优势之一,但它也使得基础语言的学习变得困难。
是否有一些工具可以分析我的代码,并根据最佳实践或合理编码提出建议?最好作为Eclipse插件或Linux应用程序。
启用最大编译警告(如果您使用Gnu编译器,则为-Wall
选项)。
"Lint"是典型的静态分析工具。
valgrind
是一个很好的运行时分析器。
对于g++,除了打开-Wall外,还要打开-pedantic,并准备被它发现的问题数量所惊讶!
C++的工具支持相对于Java、C#等其他编程语言来说比较差,因为它没有上下文无关文法。实际上,C++文法中有些部分是不可判定的。简单来说,这意味着要在语法层次上理解C++代码需要实现一个带有语义分析的编译器前端。C++不能独立地被解析成AST,大多数IDE等代码分析工具都是在AST级别进行操作。这是您在交换C++的灵活性和向后兼容性时所做出的权衡之一。
打开所有编译器警告(至少最初)并理解它们的含义,如何修复突出显示的问题以及哪些警告代表编译器编写者可能认为是模糊不清的构造是一个很好的第一步。
如果您需要更重型的工具,可以在 Windows 上尝试 PC-Lint,这仍然是 C++ 中最好的 lint 工具之一。只需记住,您需要配置这些工具以反映您的编码风格,否则您将被警告淹没,无法看到树木。是的,它需要花费一些金钱,如果您不是在“得到报酬”的水平上进行 C++ 编程,它可能有点过度,但我发现它非常有价值。
在维基百科上有一个静态代码分析工具列表:http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis。
但警告通常是好的,但启用所有警告(使用pedantic和Wall)的一个问题是您可能会收到来自包含您无法控制的头文件的大量警告,这可能会产生很多噪音。不过我更喜欢使用启用所有警告编译我的软件。由于我在Linux中编程,因此我通常会按照以下方式操作:
将我需要包含的外部头文件放在一个单独的文件中,在包含它们之前,在该文件的开头放置以下内容:
#pragma GCC system_header
然后从你的代码中包含这个文件。这将使你能够看到你自己代码中的所有警告,而不会被外部代码中的警告淹没。缺点是这是一个特定于gcc的解决方案,我不知道是否有任何平台独立的解决方案。
Lint - 有很多版本,但如果你在谷歌上搜索lint,你应该会找到一个适用的版本。另一件事是打开编译器警告 - 如果你使用gcc/g++,选项是-Wall。
你可能会发现CppChecker作为Eclipse插件对支持gcc/PC lint很有帮助。