为什么sizeof(int)小于-1?

时间:2014-07-17 07:54:30

标签: c sizeof

在以下代码中

#include <stdio.h>

int main()
{
   if (sizeof(int) > -1)
       printf("True");
   else
       printf("False");
return 0;
}

我得到输出为&#34; False&#34;而不是&#34; True&#34;。我的理解是sizeof运算符只返回int的大小,在这种情况下为4。

为什么评估条件为假?

3 个答案:

答案 0 :(得分:10)

sizeof生成size_t,始终为正。您正在将它与-1进行比较,size_t可能会在printf("%zu\n", sizeof(int)); printf("%zu\n", (size_t)(-1)); 中进行比较,这会给您一个巨大的数字,最有可能大于一个int的大小。

要确保这一点,请尝试以下方法:

sizeof

[编辑]:在评论(有些已被删除)之后,我确切地确定{{1}}是一个运算符,而不是一个函数。

答案 1 :(得分:2)

从标准中, C11,6.5.3.4 sizeof和_Alignof运算符

  

5两个运算符的结果的值是实现定义的,它的类型(一个   无符号整数类型)是size_t,在(和其他标题)中定义。

因此,sizeof运算符产生无符号值。然后,将无符号值与有符号值进行比较。这由converting the signed value to be unsigned处理,它解释了您所看到的行为。

答案 2 :(得分:0)

首先,运行代码:

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