我有些卡在代码中导致违反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)))