int与常数比较大小时的错误
int与常数进行大小比较时遇到的错误
直接上代码:
int ack_size = 0;
if(ack_size = cb(cmd , cmd_param , dat_seg , &g_tx_frame)) >= 34u)
{
//...
}
上述代码很简单,就是判断回调函数cb返回的帧长度是否大于最小帧长34。乍一看没有发现什么问题。
回调函数cb的返回值是int类型,当cb执行遇到某些错误或者异常时,返回负数,比如-1用于指示出错。这个时候问题就来了,当cb输出-1的时候,if里面的条件居然为真,进入if语句了。
百思不得其解,突然发现34u可能会将ack_size当作一个无符号数与34进行比较?于是将34u改成了34,编译运行,正常了。