如何告诉cppcheck忽略内联汇编?

时间:2017-08-08 16:39:47

标签: assembly inline cppcheck

我们在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跳过整个内联汇编部分。

我有什么方法可以做到这一点,还是我们只需要接受大量的重复评论?

谢谢,

伊恩

2 个答案:

答案 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的所有其他组合。

谢谢大卫和德鲁。