<分区>
#include <stdio.h>
main()
{
if (sizeof(int) > -1)
printf("True");
else
printf("False");
}
回答:
False
但根据逻辑 sizeof(int)
返回 2 和 if(2>-1)
返回 1 并且它应该打印 True。
为什么它的行为不一样?
标签 c if-statement sizeof
<分区>
#include <stdio.h>
main()
{
if (sizeof(int) > -1)
printf("True");
else
printf("False");
}
回答:
False
但根据逻辑 sizeof(int)
返回 2 和 if(2>-1)
返回 1 并且它应该打印 True。
为什么它的行为不一样?
最佳答案
首先,sizeof
产生的值(value)属于 size_t
这是unsigned
类型。 注意
作为 unsigned
type 比 signed
的 rank 更高类型,在执行比较时,根据关系运算符的规范,执行通常的算术转换,这意味着将有符号类型提升为无符号类型。
在你的例子中,-1
, 当被视为 unsigned
, 代表最高可能 unsigned
值(value),因此,难怪
if (sizeof(int) > -1)
评估为假。
故事的寓意:尝试比较 signed
和一个 unsigned
预期会产生奇怪的结果,就像您的情况一样。您应该启用编译器警告并尝试解决编译器报告的问题。
注意:
来自 C11
, 第 7.19 章,<stddef.h>
,
size_t
which is theunsigned
integer type of the result of thesizeof
operator.
关于c语言if语句带sizeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31957514/