C++ C++;:静态分析代码(和/或预处理代码)的工具
通常,我可以使用一些工具静态分析代码,以帮助我使其更干净。类似于编译器警告,但这些还不够。我时不时地梦想着写一个(使用clang库或gccxml),但我想这会花费太多的工作 我想到的一些事情是:C++ C++;:静态分析代码(和/或预处理代码)的工具,c++,parsing,preprocessor,C++,Parsing,Preprocessor,通常,我可以使用一些工具静态分析代码,以帮助我使其更干净。类似于编译器警告,但这些还不够。我时不时地梦想着写一个(使用clang库或gccxml),但我想这会花费太多的工作 我想到的一些事情是: 寻找幻数(即:不同于0的硬编码常量) 检查是否始终遵守三个规则(每个类必须定义所有析构函数、复制构造函数和赋值运算符,或者不定义它们) 我也梦想(但这些东西是纯粹的乌托邦),它是一个预处理器,它解析一些非标准代码并将其翻译成有效的C++代码,一个工具可以: < p>展开模板别名,以便我可以在C++中
我也梦想(但这些东西是纯粹的乌托邦),它是一个预处理器,它解析一些非标准代码并将其翻译成有效的C++代码,一个工具可以:
有没有什么工具可以做这些事情的一个子集
否则,您会建议哪些库来实现这些任务(clanglibs、gccxml等等),以及您认为需要做多少工作?谷歌有一个有趣的工具以及它的样式指南。。。叫做cpplint。这可能有助于生成更干净的代码。看一看
真是太棒了。可以做静态分析。关于寻找常数,我们可以做现成的。SCSE提供GUI界面,用于跨大型混合编程语言文件集进行搜索,使用能够准确理解每种语言词汇语法的查询语言 一个典型的查询:
'for' ... I=index* '=' N<10
您真正想要的是所有未在某种常量定义中定义的常量。因此,您希望从命中列表中删除任何常量定义,这
通过使用“查询减法”运算符完成:
N>0 - 'const' 'int' I '=' N
这将查找非零常量,并删除与const声明匹配的任何常量
你的其他梦想需要一个更复杂的引擎。本质上,你想分析C++代码(你的三的规则)或者扩展C++语言的一些新特性,然后使用标准C++能力来实现这些特性。您可以使用 可以操纵C++, 我们可以做到这一点。它有一个完整的语法,它将C++解析为内部编译器数据结构,并构建完整的符号表(并且可以从内部结构中重新生成C++源代码)。使用该前端和DMS内置的模式匹配功能,您可以实现三项检查规则 <>语言扩展,你可以通过修改语法来修改DMS C++前端,包括你认为理想的额外结构。然后,您可以编写程序转换来查找这些构造,并将它们转换为所需的代码。(这一想法由MS fame的查尔斯·西米奥尼(Charles Simyoni)提出,但只是程序转换的一个特例。)
但是,比起尝试用YACC来做事情要少很多。根据这个,CLAN只能对C和Objor -C进行静态分析。C,你曾经用过C++吗?我自己还没有用过。我想C++分析是在编写的过程中,编译器支持C++只是一个简单的例子。
N>0 - 'const' 'int' I '=' N