根据 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 配置或“胶水代码”,如宏定义