为什么sizeof(int)不大于-1?

3
这是我的C代码: 为什么输出是“False”???
为什么4 > -1?
代码:
#include <stdio.h>

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

1
因为sizeof(int)通常返回4,而-1被强制转换为unsigned int,这将返回0x7FFFFFFF - πάντα ῥεῖ
4
启用编译器警告,编译器会提示你。 - nosid
-1 不是真正的代码(main必须有一个函数结果类型)。 - Cheers and hth. - Alf
通常我不会反对,但我在这里看不到任何理由来投反对票。这只是一个重复问题,没有更多,也没有更少(即使对于新用户来说,这可能很难找到)。 - πάντα ῥεῖ
为什么-1> sizeof(int)? - phuclv
2个回答

11

因为sizeof(int)是无符号的,所以-1会被转换为一个很大的无符号值。


4

由于sizeof产生的值是一个无符号类型size_t。在>表达式中,通常的算术转换会将-1转换为>结果的类型,这个类型是无符号类型。结果的值将会是一个巨大的正数。

要获得预期的行为,请使用:

(int) sizeof (int) > -1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接