禁止棉绒消息9007

时间:2014-08-21 12:02:12

标签: c misra pc-lint

根据MISRA规则13.5,逻辑&&amp ;;的右手操作数。或||操作者不得含有持久性副作用。我们的代码用PC-Lint检查,消息9007(http://gimpel-online.com/MsgRef.html#9007)。

我们有

形式的代码

if((GET_SIGNAL1() < CONST_1) || (GET_SIGNAL2() == CONST_2) ) { dostuff(); }

GET_x是宏,好吧,信号x带有一些错误处理,后者导致预期的副作用。给出了对MISRA 13.5的规则偏差,现在问题是如何抑制相应的消息。

到目前为止的努力: 由于这是自动生成的代码,我不能直接放入lint注释,通过生成器放入注释虽然主要是难以跟踪。

宏定义中的

- e {(9007))}可以工作,但我们也有类似的代码 foo = GET_SIGNAL1(); 这将导致功能广泛停用。

也考虑过-ecall,但它只是检查调用本身,而不是宏的上下文(正如我所希望的那样)。

编辑:

我既不会影响模型也不会影响工具链。只有我能影响的部分是lint配置或“粘合代码”,如宏定义

2 个答案:

答案 0 :(得分:1)

您可以修改生成器以输出这样的新宏:

#define TEST_SIGNALS(a,b,c,d)   ((a<b) || (c<d))

if (TEST_SIGNALS(GET_SIGNAL1(), CONST_1, GET_SIGNAL2(), CONST_2))
{
   dostuff()
}

并禁用以下警告:

//lint -emacro(9007, TEST_SIGNALS)

答案 1 :(得分:0)

我们打算用两个Lint运行解决上面的问题:

  • 第一次使用生产代码和全局停用消息9007
  • 运行
  • 第二次运行使用存根宏而没有预期的副作用,但只有消息9007激活