Java有一些非常好的开源静态分析工具,如FindBugs,Checkstyle和PMD.这些工具易于使用,非常有用,可在多个操作系统上运行并且免费.
可以使用商业C++静态分析产品.虽然拥有这样的产品很棒,但是学生的成本太高,而且通常很难获得试用版.
另一种方法是找到可在多个平台(Windows和Unix)上运行的开源C++静态分析工具.通过使用开源工具,可以对其进行修改以满足特定需求.寻找工具并非易事.
下面是其他人发现或建议的C++静态分析工具的简短列表.
C++检查http://sf.net/projects/cppcheck/
Oink http://danielwilkerson.com/oink/index.html
C和C++代码计数器http://sourceforge.net/projects/cccc/
夹板(来自答案)
Mozilla的猪肉(来自答案)(现在是Oink的一部分)
Mozilla的Dehydra(来自答案)
使用-Weffc++
GNU g ++ 选项(来自答案)
什么是其他任何人都知道并可以推荐的便携式开源C++静态分析工具?
一些相关链接.
/sf/ask/17360801/
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/
选择静态代码分析工具
Soo Wei Tan.. 74
CppCheck是开源和跨平台的.
Mac OSX:
brew install cppcheck
Nicola Bonel.. 53
关于GNU编译器,gcc已经有一个内置选项,可以为-Wall的那些启用额外的警告.选项是-Weffc ++,它是关于违反Scott Meyers在他的书" 有效和更有效的C++ "中发表的一些指导原则.
特别是该选项检测以下项目:
为具有动态分配的内存的类定义复制构造函数和赋值运算符.
首选初始化为构造函数中的赋值.
在基类中使析构函数虚拟化.
让"operator ="返回对*this的引用.
必须返回对象时,请勿尝试返回引用.
区分增量和减量运算符的前缀和后缀形式.
永远不要超载"&&","||"或",".
哎呀,`-Weffc ++`警告大约*吨*的构造在大型代码库中完美无缺.我赞成了`-Wextra`的建议; 没有它就不要离开家! (22认同)
除了gcc的-Wall和-Weffc ++之外,-Wextra还做了一些很好的自由静态分析,例如,不返回值的分支,或者检查unsigned是否小于零.值得注意的是,专业程序员经常认为后者是个好主意... (7认同)
Don Wakefiel.. 29
目前正在开发中,但clang做了C分析,并且随着时间的推移有针对性地处理C++.它是LLVM项目的一部分.
更新:当着陆页显示"分析仪是一个持续的工作进行中"时,它现在被记录为C和C++的静态分析器.
问题:如何运行GCC/Clang进行静态分析?(仅限警告)
编译器选项:-fsyntax-only
CppCheck是开源和跨平台的.
Mac OSX:
brew install cppcheck
关于GNU编译器,gcc已经有一个内置选项,可以为-Wall的那些启用额外的警告.选项是-Weffc ++,它是关于违反Scott Meyers在他的书" 有效和更有效的C++ "中发表的一些指导原则.
特别是该选项检测以下项目:
为具有动态分配的内存的类定义复制构造函数和赋值运算符.
首选初始化为构造函数中的赋值.
在基类中使析构函数虚拟化.
让"operator ="返回对*this的引用.
必须返回对象时,请勿尝试返回引用.
区分增量和减量运算符的前缀和后缀形式.
永远不要超载"&&","||"或",".
目前正在开发中,但clang做了C分析,并且随着时间的推移有针对性地处理C++.它是LLVM项目的一部分.
更新:当着陆页显示"分析仪是一个持续的工作进行中"时,它现在被记录为C和C++的静态分析器.
问题:如何运行GCC/Clang进行静态分析?(仅限警告)
编译器选项:-fsyntax-only
Oink是一个建立在Elsa C++前端之上的工具.Mozilla的Pork是Elsa/Oink的一个分支.
请参阅:http://danielwilkerson.com/oink/index.html
其他人提到了-Weffc ++,但这实际上是我默认情况下没有打开的唯一GCC警告之一.但是,我打开的警告集是我的工具包中最重要的静态分析工具.您可以看到推荐警告的完整列表.
综上所述:
-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat = 2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold -style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow = 5 -Wswitch-default -Wundef -Werror -Wno-unused
请注意,其中一些需要新版本的gcc,因此如果您再次使用4.5或其他内容,则可能需要从列表中删除它们.
John Carmack还在这篇关于"静态代码分析"的有趣博客文章中提到了PVS-Studio.
如果通过开源,你真的意味着"免费",那么微软的早期分析是一个很好的分析.Windows仅限课程.它完全集成在Visual Studio和编译器中.例如:
cl /analyze Sample.cpp
Mozilla的静态分析工作可能值得一看.