如何告诉 Cppcheck 跳过头文件

Posted

技术标签:

【中文标题】如何告诉 Cppcheck 跳过头文件【英文标题】:How can I tell Cppcheck to skip a header file 【发布时间】:2012-11-27 19:35:17 【问题描述】:

Cppcheck 扫描项目文件夹中的所有文件:

c:\projectfolder\main.c
c:\projectfolder\file.c
c:\projectfolder\file.h
c:\projectfolder\file_test.cc

c:\projectfolder\file_test.cc 包含以下代码

#include "c:/gtest/gtest.h"

extern "C"

    #include "TMyStruct.h"


TEST(Stack, Overflow)

    TMyStruct unterTest;
    EXPECT_EQ(1, TMyStruct_Init(&unterTest));
    EXPECT_GE(unterTest.variable, 9000);

文件 file_test.cc 包含 gtest.h 文件

C:\gtest\gtest.h

不应测试 C:\gtest\ 中的所有文件。

我打电话

cppcheck.exe -ic:\gtest\ c:\projectfolder\ --enable=style --template="SomeError"

在来自包含的gtest.hc:\projectfolder\file_test.cc 中发现并报告了错误(详细信息:“#ifdef 配置过多”)。

我如何告诉 Cppcheck 根本不看 C:\gtest\gtest.h

【问题讨论】:

【参考方案1】:

我是一名 Cppcheck 开发人员。我认为您不能跳过头文件。也许 -i 应该那样工作。

请随时为此创建票证:http://sourceforge.net/apps/trac/cppcheck/

【讨论】:

我很想写 /*ccpcheck::startignore*/ ... /*ccpcheck::endignore*/ 我认为这是可以接受的。我添加了一张票 (sourceforge.net/apps/trac/cppcheck/ticket/4377)。我不能保证我们会尽快修好票。所以如果您有时间,请随时查看。 好吧,否则我会被卡住:) 我如何加入这个项目? 这个功能有进展吗? 根据手册 (cppcheck.sourceforge.net/manual.pdf) 第 7 页所述,i 选项可用于忽略文件。【参考方案2】:

我的项目结构如下:

├── build
├── lib
│   └── dep
│       └── dep.h
├── src
│   ├── code.c
│   └── code.h
└── tests
    └── code_test.c

为了抑制 lib 包含的警告,我这样做了:

cppcheck --enable=all --suppress='*:lib/*' -Isrc -Itests ./src ./tests 1>/dev/null

也许这应该适用于 Windows:

cppcheck.exe --suppress='*:c:\gtest\*' c:\projectfolder\

我的 Cppcheck 版本是 1.74。

参考:

Allow ignoring results from header files

【讨论】:

以上是关于如何告诉 Cppcheck 跳过头文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 cppcheck 中抑制库代码的输出?

如何告诉 cppcheck 忽略某些错误?

如何使用 cppcheck 忽略某些文件类型?

cppcheck-vs-addin - 如何从检查中删除文件夹

在哪里告诉 Qt Creator 搜索用于自动完成的头文件

如何将不同的 Cppcheck 结果保存在同一个 Xml 文件中