cppcheck 解析后缺少大量作用域类型

Missing lots of scope types after cppcheck parsing

提问人:Nikeau 提问时间:6/29/2023 最后编辑:Nikeau 更新时间:6/29/2023 访问量:55

问:

我们最近开始使用 Cppcheck,除了示波器之外,一切都运行良好。

我可能误解了某些东西,但是解析后生成的 .dump 文件中不应该有单独的枚举、结构、联合等范围吗?

我本来以为会有基于 cppcheck 文档(“ScopeType”枚举)和misra_8_12规则。

头文件解析为示例:

enum week {
  LOW = 1,
  MEDIUM,
  HIGH
};

void testfct(void)
{
  enum week day;
}

因此,我得到的唯一作用域是 testfct 函数的“全局”作用域和“函数”作用域。我不应该也得到一个“周”枚举的范围吗?

我的上下文python脚本(cfg是解析后获得的每个文件配置):

for scope in cfg.scopes:
  print('    Id:' + scope.Id)
    if scope.className:
      print(' name:' + scope.className)
    if scope.type:
      print(' type:' + scope.type)

python 脚本在这里并不重要,因为范围甚至不在 .dump xml 结果文件中。

以及我们对 cppcheck 的调用(在 .bat 文件中):

cppcheck.exe --enable=all -j 4 --xml --dump <target_file>
python c 解析 cppcheck

评论

0赞 BoP 6/29/2023
尽管使用了枚举声明,但并不是一个单独的范围。如果是,则这些值在 .{ }};
0赞 Nikeau 6/29/2023
@BoP 如果我们严格谈论 C 而不是 Cppcheck,我同意。但是,如果 Cppcheck 也是如此,那么“ScopeType”枚举的用途是什么?另外,Cppcheck misra_8_12规则应该如何工作?因为查看其代码,它正在清除搜索“枚举范围” Cppcheck doc : cppcheck.sourceforge.io/devinfo/doxyoutput/classScope.html
1赞 BoP 6/29/2023
我不知道这个工具,但知道 C++ 作用域枚举 (),如果没有作用域前缀,这些值是不可见的。enum class
0赞 Nikeau 6/29/2023
@BoP 好吧,我不知道作用域枚举是一回事,我今天学到了一些东西。无论如何,找到了我问题的解决方案。感谢您的帮助。

答:

0赞 Nikeau 6/29/2023 #1

找到了解决方案。

事实证明,您需要一个 C 文件来包含定义“枚举”的标头。枚举、结构...在“.c”文件的结果 .dumb 文件中都可用,但在“.h”哑文件中不可用,这与两者中都可用的函数范围相反。我真的不明白这背后的逻辑,但是,它就在这里。