Java有一些非常好的开源静态分析工具,如FindBugs、Checkstyle和PMD。这些工具易于使用,非常有用,可以在多个操作系统上运行,而且是免费的。

商业c++静态分析产品是可用的。虽然拥有这样的产品很棒,但对于学生来说,成本太高了,而且通常很难得到试用版。

另一种选择是找到可以在多个平台(Windows和Unix)上运行的开源c++静态分析工具。通过使用开源工具,可以对其进行修改以适应特定的需求。找到这些工具并非易事。

下面是其他人发现或建议的c++静态分析工具的简短列表。

c++检查http://sf.net/projects/cppcheck/ 呼噜声http://danielwilkerson.com/oink/index.html C和c++代码计数器http://sourceforge.net/projects/cccc/ 夹板(来自答案) Mozilla的猪肉(来自答案)(这现在是Oink的一部分) Mozilla的Dehydra(来自答案) 使用选项- weffc++ for GNU g++(来自答案)

还有哪些大家都知道并可以推荐的可移植的开源c++静态分析工具?

一些相关链接。

http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis http://www.chris-lott.org/resources/cmetrics/ 根据一组编码标准检查C/ c++源代码的免费工具? http://spinroot.com/static/ 选择静态代码分析工具


当前回答

对于GNU编译器,gcc已经有一个内置选项,可以对-Wall的那些选项进行额外的警告。这个选项是- weffc++,它违反了Scott Meyers在他的书《Effective and More Effective c++》中发表的一些指导方针。

特别是该选项检测以下项目:

为动态分配内存的类定义复制构造函数和赋值操作符。 在构造函数中首选初始化而不是赋值。 在基类中将析构函数设为虚函数。 让"operator="返回对*this的引用。 当必须返回对象时,不要尝试返回引用。 区分递增和递减操作符的前缀和后缀形式。 不要让“&&”、“||”或“,”过载。

其他回答

clang目前还在开发中,但是clang做C分析,目标是随着时间的推移处理c++。这是LLVM项目的一部分。

更新:虽然登陆页面上写着“分析器是一个持续的工作中”,但它现在被记录为C和c++的静态分析器。

问:如何运行GCC/Clang进行静态分析?(警告)

编译器选项:-fsyntax-only

有人提到了- weffc++,但这实际上是我在默认情况下没有打开的唯一GCC警告之一。但是,我所打开的警告集是我的工具包中最重要的静态分析工具。您可以看到建议警告的完整列表。

总而言之:

-pedantic -Wall -Wextra -Wcast-align -Wcast-qual - wctor - dr -privacy -Wdisabled-optimization -Wformat=2 -Winit-self - wlogic -op - wloss -declarations - wloss -include-dirs -Wnoexcept - wd -style-cast - woverload -virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default - wdef -Werror -Wno-unused

请注意,其中一些需要新的gcc版本,因此如果您停留在4.5或其他版本,可能需要从列表中删除它们。

Doxygen做一些控制流分析并生成图形。这些可能不是你要找的,但我发现它们很有用。

CppCheck是开源和跨平台的。

Mac OSX:

brew install cppcheck

还可以在MELT(一种专门为扩展GCC而设计的领域语言)中编写GCC扩展代码,或者在C中编写GCC插件(难度大得多),以进行一些自定义分析。