C语言不细心造成的问题教训记录

本文探讨了在C/C++中,无符号与有符号整数比较时可能出现的问题。通过举例说明在不同架构下,编译器对待不同类型变量比较的差异,强调在编程时需要注意变量类型的匹配和强制转换,以防止因类型不匹配导致的错误判断。对于0x90U与char类型变量的比较,作者指出在某些架构下可能由于类型转换规则不同而引发误判,提醒开发者重视这类细节。
摘要由CSDN通过智能技术生成

1、变量边界不细心造成的问题,

int cmd_decode(const char *input)
{
if(input[0] != 0x90U)
{
//do something
}
}

input变量为char类型,而0x90U为无符号,0x90>128所以为负数,有些编译器不会对变量进行强制转换,认为左值为负数,右值为正数,造成不等的判断成立(经过测试在arm64架构下,变量会强制转换为相同的类型,而x64架构不会转换造成0x90 != 0x90U),所以一定要注意此问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值