警告
- Warning[Pe186]: pointless comparison of unsigned integer with zero
typedef enum {
PRO_NULL = 0,
PRO_TYPE_X,
PRO_TYPE_Y,
PRO_TYPE_Z,
PRO_MAX_TYPE,
}PRO_TYPE;
void fun(char *pData)
{
PRO_TYPE type = PRO_NULL;
type = *pData;
if((type<0)||(type>PRO_MAX_TYPE))
{
return; //这里总是会返回
}
}
本意是希望判断type的类型是否在定义的枚举类型内,不在内则退出。但实际上述程序总是会退出。
原因
- 解释:
无符号整形和0的无意义比较 - 影响:
一个潜在的问题,判断无符号数大于等于0.由于无符号数没有负数,这种判断恒为真.
修改
将函数内type定义成int类型,从外部参数pData中解析后,与枚举类型的变量进行对比
typedef enum {
PRO_NULL = 0,
PRO_TYPE_X,
PRO_TYPE_Y,
PRO_TYPE_Z,
PRO_MAX_TYPE,
}PRO_TYPE;
void fun(char *pData)
{
int type = 0;
type = *pData;
if((type<0)||(type>PRO_MAX_TYPE))
{
return;
}
}