c - 抑制 lint 消息 9007

标签 c misra pc-lint

根据 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/

相关文章:

c - 尝试附加到文件 C 时权限被拒绝

c - 重用现有的链表 API 实现

c++ - 米斯拉-C++ :2008[8-4-3] : return in all exit path in function

c - MISRA 13.5 关于非编译示例的问题

visual-studio - 让 PC-lint 与 Visual Studio 一起使用

c - 在带有第三方库的项目上使用 PC-Lint

c - C 中 case 范围的语法?

c - 是否可以在 C 中将隐式函数作为函数指针传递?

c - 如何解决 MISRA C :2012 Rule:8. 4?

c - 使用直接寄存器寻址时出现 PC-Lint 错误