为什么sizeof(int)小于-1?
在以下代码中
#include int main() { if (sizeof(int) > -1) printf("True"); else printf("False"); return 0; }
我得到输出为“False”而不是“True”。我的理解是sizeof运算符只返回int的大小,在这种情况下为4。
为什么评估条件为假?
sizeof
生成一个始终为正的size_t
。 你将它与-1
进行比较,这可能是在size_t
中提升的,它给你一个巨大的数字,很可能大于int的大小。
为了确保它,试试这个:
printf("%zu\n", sizeof(int)); printf("%zu\n", (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