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,编译运行,正常了。

posted @ 2023-02-01 13:34  玩呀熊熊  阅读(29)  评论(0编辑  收藏  举报