为什么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