根据 MISRA 规则 13.5,逻辑 && 或 || 的右手操作数运营商不得包含持续的副作用。我们的代码使用 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 配置或像宏定义这样的“胶水代码”
最佳答案
你能修改生成器来输出这样的新宏吗:
#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)
关于c - 抑制 lint 消息 9007,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25425869/