根据MISRA规则13.5,逻辑操作符的右手操作数不应包含持久的副作用。我们的C代码是用PC,message 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,但它只是检查调用本身,而不是宏的上下文(正如我所希望的)。
发布于 2014-08-21 12:51:32
不确定这是否能解决所有问题,但如果您试图将SonarQube http://sonarqube.15.x6.nabble.com/包含在您的lint流程/报告中,则会对一些人有所帮助。您应该能够定制更多的结果。我个人没有使用这个,但它似乎是你想要去的地方。
发布于 2014-09-03 05:58:17
我们打算通过两次Lint运行来解决上述问题:
https://sqa.stackexchange.com/questions/9513
复制相似问题