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