如何正确使用cppcheck-suppress忽略参数应按const引用传递的报错
Cppcheck抑制passedByValue告警的正确写法
问题背景
现有writeFile函数签名如下:
writeFile(std::string fileId, std::string otherVariable){}
运行Cppcheck检测时收到报错:Function parameter 'aFileId' should be passed by const reference. [passedByValue]
由于修改为const引用传参会破坏二进制兼容性,无法修改函数签名,需要通过cppcheck-suppress内联注释忽略该报错。先后尝试的两种注释写法均未生效:
第一种(注释放函数上方,错误填写了参数名):
// cppcheck-suppress aFileId writeFile(std::string aFileId, std::string otherVariable){}
第二种(注释放参数行尾,同样错误填写了参数名):
writeFile(std::string aFileId, // cppcheck-suppress aFileId std::string otherVariable) { // 业务逻辑 }
失效原因
cppcheck-suppress 注释后需要传入的参数是Cppcheck检查规则的ID,而非要忽略的参数名。这条告警的规则ID已经在报错信息末尾的方括号中标明,即passedByValue,之前的写法错把参数名当成了规则ID,所以无法生效。
正确写法
写法1:函数上方单独注释(兼容性最好,推荐)
直接在目标函数的上一行添加抑制注释,填写正确的规则ID即可:
// cppcheck-suppress passedByValue writeFile(std::string aFileId, std::string otherVariable){}
如果需要精准抑制指定参数触发的告警,避免误屏蔽同函数其他参数触发的同类问题,可以在规则ID后追加参数名标识:
// cppcheck-suppress passedByValue [aFileId] writeFile(std::string aFileId, std::string otherVariable){}
写法2:行尾注释
如果要把抑制注释放到对应参数的行尾,同样填写正确的规则ID即可:
writeFile(std::string aFileId, // cppcheck-suppress passedByValue std::string otherVariable) { // 业务逻辑 }
注意:部分旧版本Cppcheck对行尾内联抑制的支持存在缺陷,如果使用该写法仍然收到告警,优先换成上方单独一行写注释的写法。
内容的提问来源于stack exchange,提问作者moab
相关产品推荐
相关产品推荐

