【问题标题】:make cppcheck skip the PACKAGE definition使 cppcheck 跳过 PACKAGE 定义
【发布时间】:2014-04-05 18:47:36
【问题描述】:

我正在使用 cppcheck 1.64 的 GUI 版本对 C++-Builde-6 代码进行静态代码分析。对于 DLL 导出和导入,PACKAGE 的定义是必要的:

/// A dialog exported from a BPL (a VCL-specific kind of DLL)
class PACKAGE MySharedDialog {

public:
    // lots of methods to-be checked

private:
    // lots of methods to-be checked

    // lots of members

};

Cppcheck 在遇到PACKAGE 时停止,因为它不知道它的含义:

未处理代码“class PACKAGE TAppInfoDialog {”。您可以使用 -I 或 --include 来添加对此代码的处理。

...这当然意味着不检查整个班级。如果我可以让 cppcheck 简单地忽略 PACKAGE“关键字”,它会完全做正确的事情,但是该怎么做呢?通过包含路径包含其原始定义似乎不是一个选项:cppcheck 然后告诉我很多关于 VCL 框架的标头我无法更改...

The manual 没有描述这样做的选项,谷歌没有帮助,所以还没有答案。

在 cppcheck 问题跟踪器中,我发现了类似的问题#4707 (Microsoft 'abstract' and 'sealed' extension for class) – cppcheck。在这里,主要开发人员建议创建一个文件并(预先?)将其包含到 cppcheck 运行中,但我使用的是 GUI 版本,并且没有包含单个文件的选项。所以我尝试在我的项目选项(一个 XML 文件)的包含部分添加一个导向器,然后我将相应的行编辑为文件规范,但这显然是无稽之谈,因为该部分包含 包含路径 .

接下来我可以尝试什么?

【问题讨论】:

  • 它是开源的,大家都在等待你的补丁。
  • @HansPassant :) 我希望这只是一个玩笑,并且已经有了一个选项。例如,使用 cppcheck 正在运行的定义?

标签: c++ vcl static-code-analysis cppcheck language-extension


【解决方案1】:

解决方法是在项目文件中添加PACKAGE(为空)的定义:

<?xml version="1.0" encoding="UTF-8"?>
<project version="1">
    <defines>
        <define name="PACKAGE=" />
    </defines>    
</project>

我终于在项目仓库cppcheck/gui/projectfile.txt at master · danmar/cppcheck · GitHub这个小而有价值的项目文件描述中找到了这个解决方案

【讨论】:

  • 是跳过PACKAGE,将其定义为空是最好的解决方案。
  • @DanielMarjamäki 感谢官方声明:) - 有没有办法集中这些项目定义(通过包含,通过配置)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
  • 2016-10-03
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多