CppCheck 规则不显示#define,注释

Posted

技术标签:

【中文标题】CppCheck 规则不显示#define,注释【英文标题】:CppCheck rule not show #define, comment 【发布时间】:2019-10-16 08:44:00 【问题描述】:

我正在为 cppCheck 创建自定义规则。当我在项目中创建不允许#define 之类的规则时。但是 --rule=.+ 在我的测试项目中没有显示#define。 cppcheck 是否有任何选项或标志可以在我的代码中显示#define?

我的规则文件:

<?xml version="1.0"?>
<rule version="1">
       <pattern>#define</pattern>
</rule>

我的例子:

#define TEST 1

int main() 
    int a = TEST;
    return 0;

【问题讨论】:

not show #define - 请创建一个 MCVE - 一个最小的可重现示例,包括有关如何创建自定义规则的步骤?您是如何添加自定义规则的?你在什么代码上测试过?请在#define 不显示的地方包含尽可能小的“测试项目”源代码。 感谢您的评论。我已经编辑了我的问题 为什么你不允许#define?如果没有它,你打算如何编写 header 保护? 【参考方案1】:

writing-rules-2.pdfhttps://sourceforge.net/projects/cppcheck/files/Articles/ 处的文档 writing-rules-2.pdf 指出:“Cppcheck 数据已预处理。没有 cmets、#define、#include 等。”

作为替代方案,您可以使用cppcheck --dump yourfile.c 创建一个 XML 转储,然后对转储进行后处理,例如通过 Python 脚本。 然后,您示例的 #define TEST 1 行是 rawtokensdirectivelist 部分的一部分。 几个 Cppcheck 插件就是这样做的(例如 Python MISRA-C 插件)。请参阅 GitHub 上 Cppcheck 的“插件”目录。在这个目录中还有一个 Python 帮助脚本cppcheckdata.py,它读取转储文件并为令牌、函数等创建对象列表。

【讨论】:

以上是关于CppCheck 规则不显示#define,注释的主要内容,如果未能解决你的问题,请参考以下文章

Cppcheck:所有功能的检查注释的自定义规则

cppcheck 超出范围

什么是 cppcheck 规则文件 <pattern> 语法?

自定义 cppcheck 规则集

cppcheck 可以在不实际检查的情况下进行试运行以列出所有文件吗?

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