Cppcheck 停止检查未使用的StructMember

Posted

技术标签:

【中文标题】Cppcheck 停止检查未使用的StructMember【英文标题】:Cppcheck stop checking unusedStructMember 【发布时间】:2021-04-27 03:38:38 【问题描述】:

cppcheck版本:2.3

1.扫描以下代码(rsvd.c)

typedef struct 
    int a;
    // cppcheck-suppress unusedStructMember
    int b;
    int c;
 test;


int main()

    test A;
    A.a = 5;

    return 0;

运行cppcheck --inline-suppr --enable=all rsvd.c 结果如下(如预期):

正在检查 rsvd.c ...

rsvd.c:7:9: style: struct member 'test::c' 从未使用过。 [未使用的结构成员]

int c;

rsvd.c:14:9: style: 变量“A.a”被分配了一个从未使用过的值。 [未读变量]

A.a = 5;

2.扫描以下二维码

typedef struct 
    int a;
    int b;
    int c;
 test;


int main()

    test A = 1, 2, 3;
    return 0;

结果如下(非预期):

正在检查 rsvd.c ...

rsvd.c:3:9: style: struct member 'test::a' 从未使用过。 [未使用的结构成员]

int a;

rsvd.c:4:9: style: struct member 'test::b' 从未使用过。 [未使用的结构成员]

int b;

rsvd.c:5:9: style: struct member 'test::c' 从未使用过。 [未使用的结构成员]

int c;

rsvd.c:11:12: style: 变量“A”被赋予了一个从未使用过的值。 [未读变量]

测试 A = 1, 2, 3;

在前面的代码中,已为结构成员变量赋值。这是该工具的误报。我怎么解决这个问题?非常感谢。

【问题讨论】:

【参考方案1】:

这是 Cppcheck 中的误报。我为这个问题提交了https://trac.cppcheck.net/ticket/10699。

不幸的是,大括号初始化器在所有情况下都没有得到很好的处理。这正在改进。 在某些情况下,当您切换到 (/) 时,此类警告会消失,但您不应该这样做。

【讨论】:

以上是关于Cppcheck 停止检查未使用的StructMember的主要内容,如果未能解决你的问题,请参考以下文章

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

声明结构数组时,cppcheck 停止分析整个文件

cppcheck使用大全

使用 Cppcheck 检查非标准文件扩展名

cppcheck静态代码检查工具使用教程

cppcheck静态代码检查工具使用教程