我们在DSP的内联汇编中有一个文件。 Cppcheck认为已经分配了一些“变量”,但没有使用"装配中的线条。
有没有办法告诉它跳过检查内联汇编部分?我在手册中看不到任何明显的东西,依次压制每一行有点乏味(t
这是一些违规行的例子。它是一个上下文保存例程。
inline assembly void save_ctx()
{
asm_begin
.undef global data saved_ctx;
.undef global data p_ctx;
asm_text
...
st XM[p0++], r0;
st XM[p0++], r1;
st XM[p0++], r2;
st XM[p0++], r3;
st XM[p0++], r4;
st XM[p0++], r5;
st XM[p0++], r6;
...
我可以关闭这些消息 // cppcheck-suppress unreadVariable 在每一行之前,但最好告诉cppcheck跳过整个内联汇编部分。
我有什么方法可以做到这一点,还是我们只需要接受大量的重复评论?
谢谢,
伊恩
答案 0 :(得分:2)
根据手册页(没有尝试过自己),您可以添加命令行选项:
--suppress=<spec>
取消特定警告。
<spec>
的格式为:[error id]:[filename]:[line]
。[filename]
和[line]
是可选的。[error id]
可能*
取消所有警告(对于指定的文件或文件)。[filename]
可能包含通配符*
或?
。
--suppressions-list=<file>
取消文件中列出的警告。每个抑制的格式为
<spec>
以上。
即。在您的情况下--suppress=unreadVariable:all_dsp_asm_*.cpp
并完全切换这些特定文件。哪个是IMO可用的,因为你可以将所有DSP内联asm内容放入单独的文件中,因此它不会影响你的普通cpp检查。
或者在最坏的情况下使用抑制列表列表文件,您可以在其中列出我认为特别粗略的行,以覆盖整个内联部分。
我不知道如何在源代码中内联它,看起来它可能只影响单行。
检查可能更新的manual here版本,您也可以-i<filename>
排除整个文件(第二页)。
以上选项位于第11页。
答案 1 :(得分:2)
有点反直觉,但感谢@DavidWohlferd指出我正确的方法。
-D__CPPCHECK__
不做正确的事。它告诉cppcheck 仅检查具有__CPPCHECK__
的块或没有定义任何内容,即它完全关闭组合检查。但是,有一个简单但反直觉的解决方案使用-U。
用
包裹块#define EXCLUDE_CPPCHECK
#ifdef EXCLUDE_CPPCHECK
...
#endif // EXCLUDE_CPPCHECK
现在,如果你用-UEXCLUDE_CPPCHECK
调用cppcheck,它将跳过该块(即使#define就在它之前!)但仍然执行#if中使用的#define的所有其他组合。
谢谢大卫和德鲁。