为什么sizeof(int)小于
这个问题在这里已经有了答案:
sizeof
生成一个总是正数的size_t
。 你将它与-1
进行比较,这可能是在size_t
中提升的,它给了你一个巨大的数字,最可能大于int的大小。
为了确保它,试试这个:
printf("%zun", sizeof(int));
printf("%zun", (size_t)(-1));
[编辑]:以下评论(有些已被删除),我确实确实sizeof
是一个操作符,而不是一个函数。
从标准C11 6.5.3.4 sizeof和_Alignof操作符 :
5两个运算符的结果值都是实现定义的,其类型(无符号整数类型)是size_t,在(和其他头文件)中定义。
所以, sizeof
运算符产生一个无符号值。 然后,您将无符号值与有符号值进行比较。 这是通过将有符号值转换为无符号来处理的,这解释了您看到的行为。
首先,运行你的代码:
cc1plus: warnings being treated as errors
In function 'int main()':
Line 3: warning: comparison between signed and unsigned integer expressions
然后修复它:
int main()
{
if ((int)sizeof(int) > -1) // cast value of sizeof(int) to int before compare to int
printf("True");
else
printf("False");
return 0;
}
结果:
True
链接地址: http://www.djcxy.com/p/21145.html