如何解决将指针传递给函数后,MISRA 检查器错误推断
{
uint8_t u8Integer = 0xFFU;
returnCode = someFucntion(&u8Integer);
uint8_t u8Decimal = 0xFFU;
returnCode = someOtherFucntion(&u8Decimal);
uint16_t u16Temp = ((static_cast<uint16_t>(u8Integer) << 8U) | static_cast<uint16_t>(u8Decimal));
if(u16Temp <= 0xC000) // Problem here
{
// Uneracahble Code ?
}
else // {...}
}
someFucntion
和 someOtherFucntion
签名如下所示:
int8_t someFucntion(uint8_t * pu8Data) const;
int8_t someOtherFucntion(uint8_t * pu8Data) const;
自动 MISRA 静态检查会引发错误,指出 if
语句永远不会为真。
我猜是因为 u8Decimal
和 u8Integer
在将它们的指针传递给 someFucntion
和 someOtherFucntion
时被修改,并且检查器假定它们仍然是 0xFF
,因此 {{ 1}} 永远不会改变,使它永远是 u16Temp
.
当我运行此程序时,> 0xC000
的值会正确更改(有时输入 u16Temp
语句,有时不输入)。
检查器说“u16Temp 的推断值为 65535”
这只是检查器工作不正常的情况吗?还是我真的有代码问题?
我尝试将变量设置为 if
但这没有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。