在这种情况下sizeof(int)返回什么?

时间:2014-10-28 13:00:57

标签: c++ c sizeof turbo-c++

#include<stdio.h>
#include<conio.h>

void main()
{   
    if(sizeof(int)>=-2)    
        printf("True");
    else
        printf("False");
}

当我尝试使用Turbo C ++编译这段代码时,它返回False而不是True。 但是当我尝试打印int的值时,程序返回2。

这怎么可能?当sizeof(int)返回2而且是2&gt; = - 2时。

2 个答案:

答案 0 :(得分:16)

sizeof(int)被替换为std::size_t类型,在大多数实现上都是无符号

由于签名被提升为无符号,因此使用unsigned签名导致奇怪的结果。

您可以获得合理的结果,如下所示

if(static_cast<int>(sizeof(int)) >= -2)

如果您正在使用C编译器

if((int)sizeof(int) >= -2)

例如,使用某些警告标志-Wall编译代码应该最有可能警告有符号/无符号比较。 (如果你没有忽略警告)

答案 1 :(得分:2)

sizeof的类型为size_ttypedef unsigned int size_t)。 unsigned int与签名相比可能会导致错误答案。