我有些卡在代码中导致违反MISRA C 2004 10.5的部分,但无法弄清楚到底是什么原因。

我已定义此MACRO以获得2的幂。

显示违规的代码是

#define tmM_pow2_16bit(x)   ((tm_uint16)((tm_uint16)1U<<((tm_uint16)x)))

来自静态分析工具的消息是

签署数量的左移(int)[MISRA 2004规则10.5,必填]

谢谢

最佳答案

最可能的原因是,移位运算符强制将(tm_uint16)1U隐式提升为int类型。

删除第二个强制类型转换,以确保您转换无符号类型:

((tm_uint16)(1U<<((tm_uint16)x)))

10-08 04:09