为什么sizeof(int)小于

这个问题在这里已经有了答案:

  • void main(){if(sizeof(int)> -1)printf(“true”); else printf(“false”); ; [重复] 3个答案

  • sizeof生成一个总是正数的size_t 。 你将它与-1进行比较,这可能是在size_t中提升的,它给了你一个巨大的数字,最可能大于int的大小。

    为了确保它,试试这个:

    printf("%zun", sizeof(int));
    printf("%zun", (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
    
    链接地址: http://www.djcxy.com/p/21145.html

    上一篇: Why is sizeof(int) less than

    下一篇: Why call sizeof operator with two arguments?