cppcheck 如何抑制内联不匹配抑制?
cppcheck How to suppress inline unmatched suppression?
我发现 --suppress=unmatchedSuppression
仅抑制 cppcheck 选项中不匹配的抑制类型,但不抑制不匹配的内联抑制。
这是预期的行为吗?
test.c
第 4 行错误。应该警告arrayIndexOutOfBounds
第 7 行没问题。它不应该被警告 arrayIndexOutOfBounds
我对这两行都有内联 cppcheck-suppress
。
1 void f() {
2 char arr[5];
3 // cppcheck-suppress arrayIndexOutOfBounds
4 arr[10] = 0;
5
6 // cppcheck-suppress arrayIndexOutOfBounds
7 const char ok[] = "this line is ok";
8 }
Situation 1
禁止 cstyleCast
,它在代码中不存在。
cppcheck --inline-suppr --force --enable=all
--xml-version=2 --suppress=cstyleCast test.c
2>cppcheckresults.xml
我收到警告(以及其他不相关的警告)
unmatchedSuppression: arrayIndexOutOfBounds
在 test.c
line 7
(如预期)
unmatchedSuppression: cstyleCast
在 *
line 0
(如预期)
Situation 2
与情况 1 相同,但有额外的 --suppress=unmatchedSuppression
选项
cppcheck --inline-suppr --force --enable=all
--xml-version=2 --suppress=cstyleCast --suppress=unmatchedSuppressiontest.c
2>cppcheckresults.xml
我希望之前的两个 unmatchedSuppression
警告都消失。但我仍然得到
unmatchedSuppression
在 test.c
line 7
(不期望)
我最近发现,来自内联抑制的 unmatchedSuppression
警告无法通过通用 --suppress=unmatchedSuppression
或仅将该警告 ID 放入 --suppressions-list
文件中来抑制。您必须使用文件名对其进行限定。例如 --suppress=unmatchedSuppression:test.c
.
顺序解决方案的问题是您必须对每个具有无与伦比的抑制的文件执行此操作。
一个。在命令行中使用选项 --suppress=unmatchedSuppression:{}
。 (注意大括号)
乙。我发现的是,你还可以将不匹配的抑制本身抑制到位,例如:
// cppcheck-suppress[assertWithSideEffect,unmatchedSuppression]
assert(...);
(使用 cppcheck 2.3 和 2.5 测试)
这是必要的,例如 运行 cppcheck 2.3 没有 assertWithSideEffect
功能,后来在 cppcheck 2.5 中可用。
理想情况下,当您提高 cppcheck 版本时,您可以开始删除不必要的 unmatchedSuppression
。
不用说了,这都需要命令行--inline-suppr
.
我发现 --suppress=unmatchedSuppression
仅抑制 cppcheck 选项中不匹配的抑制类型,但不抑制不匹配的内联抑制。
这是预期的行为吗?
test.c
第 4 行错误。应该警告
arrayIndexOutOfBounds
第 7 行没问题。它不应该被警告
arrayIndexOutOfBounds
我对这两行都有内联 cppcheck-suppress
。
1 void f() {
2 char arr[5];
3 // cppcheck-suppress arrayIndexOutOfBounds
4 arr[10] = 0;
5
6 // cppcheck-suppress arrayIndexOutOfBounds
7 const char ok[] = "this line is ok";
8 }
Situation 1
禁止 cstyleCast
,它在代码中不存在。
cppcheck --inline-suppr --force --enable=all
--xml-version=2 --suppress=cstyleCast test.c
2>cppcheckresults.xml
我收到警告(以及其他不相关的警告)
unmatchedSuppression: arrayIndexOutOfBounds
在test.c
line 7
(如预期)unmatchedSuppression: cstyleCast
在*
line 0
(如预期)
Situation 2
与情况 1 相同,但有额外的 --suppress=unmatchedSuppression
选项
cppcheck --inline-suppr --force --enable=all
--xml-version=2 --suppress=cstyleCast --suppress=unmatchedSuppressiontest.c
2>cppcheckresults.xml
我希望之前的两个 unmatchedSuppression
警告都消失。但我仍然得到
unmatchedSuppression
在test.c
line 7
(不期望)
我最近发现,来自内联抑制的 unmatchedSuppression
警告无法通过通用 --suppress=unmatchedSuppression
或仅将该警告 ID 放入 --suppressions-list
文件中来抑制。您必须使用文件名对其进行限定。例如 --suppress=unmatchedSuppression:test.c
.
顺序解决方案的问题是您必须对每个具有无与伦比的抑制的文件执行此操作。
一个。在命令行中使用选项 --suppress=unmatchedSuppression:{}
。 (注意大括号)
乙。我发现的是,你还可以将不匹配的抑制本身抑制到位,例如:
// cppcheck-suppress[assertWithSideEffect,unmatchedSuppression]
assert(...);
(使用 cppcheck 2.3 和 2.5 测试)
这是必要的,例如 运行 cppcheck 2.3 没有 assertWithSideEffect
功能,后来在 cppcheck 2.5 中可用。
理想情况下,当您提高 cppcheck 版本时,您可以开始删除不必要的 unmatchedSuppression
。
不用说了,这都需要命令行--inline-suppr
.