首先声明sizeof返回的数据是无类型的,在使用中要时刻注意
如下列代码中,if中判断的结果就是 -1 大于sizeof(num)
int main()
{
int num;
printf("sizeof(num)=%d\n",sizeof(num));
if(-1 < sizeof(num))
printf("i小于num!\n");
else
printf("i大于num!\n");
}
代码运行结果如下
分析得出:因为sizeof()返回的数据是无类型的,所以sizeof(num)后临时定义类型为unsigned int,if语句在signed int和unsigned int之间测试相等性,所以i会被升级为unsigned int类型的一个非常大的正整数,导致if判断超出预期结果。 这是ANSI C的一个BUG,以后使用复数与sizeof返回值进行比较时要时刻注意。
解决方式是在sizeof前进行类型定义,如:
if(-1 < (int)sizeof(num))