使用cppcheck而不定义所有宏

时间:2015-11-02 09:03:37

标签: c++ cppcheck

我在使用boost库的项目中使用cppcheck。这个库中的标题包含大量的宏,我甚至没有在我的源代码中使用它。然而,cppcheck根据我认为无用的宏来探索路径。有没有办法告诉cppcheck忽略所有宏,除非它是使用#define在源代码中定义的?

4 个答案:

答案 0 :(得分:4)

以下是cppcheck文档中的必要部分:

-D<ID>               Define preprocessor symbol. Unless --max-configs or
                     --force is used, Cppcheck will only check the given
                     configuration when -D is used.
                     Example: '-DDEBUG=1 -D__cplusplus'.
-U<ID>               Undefine preprocessor symbol. Use -U to explicitly
                     hide certain #ifdef <ID> code paths from checking.
                     Example: '-UDEBUG'

您可以使用这些选项定义(-D)或取消定义(-U)自定义预处理程序符号。

另一个可能有趣的选择是

-f, --force          Force checking of all configurations in files. If used
                     together with '--max-configs=', the last option is the
                     one that is effective.

--max-configs=<limit>
                     Maximum number of configurations to check in a file
                     before skipping it. Default is '12'. If used together
                     with '--force', the last option is the one that is
                     effective.

这意味着以下内容:

cppcheck --force <PATH_TO_YOUR_CODE>

Cppcheck验证预处理器路径的所有组合,这可能导致大型代码库的长检查时间。

可以找到相应的文档here

答案 1 :(得分:2)

不完全是你想要的,但你可以指定define来cppcheck,所以它只评估一个分支:

请参阅-D / -U选项。

答案 2 :(得分:0)

一种选择是通过将注释放在有问题的行上方来忽略缺少宏的行:

// cppcheck-suppress unknownMacro

答案 3 :(得分:0)

使用 --config-exclude= 排除包含无法管理的配置的目录。它只排除头文件。