在以下代码中
#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。
为什么评估条件为假?
答案 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