为什么我们在不同的编译器上得到不同的结果/输出?

问题描述 投票:0回答:1
#include <stdio.h>
int main () {
    double num = 5.2;
    int var = 5;
    printf("%d\t", sizeof(!num));
    printf("%d\t", sizeof(var = 15/2));
    printf("%d", var);
    return 0;
}

在 VS 2010 和 GCC 4.7.0 上运行此程序给出的输出为

1 4 5
,使用 Turbo 3.0/4.5 给出的结果为
2 4 5

我们从哪里可以获得数据类型的确切大小?

我确实阅读了以下链接:link1link2link3link4link5 但他们无法回答我的问题!

c++ c sizeof primitive-types
1个回答
1
投票

这个问题是一种复杂的方式来询问为什么

sizeof(bool)
在某些编译器中为 1 而在其他编译器中为 2。事实上,C++ 标准并不要求
bool
的大小为 1,这意味着不同的编译器可能会为其分配不同的大小,这就是您问题的答案。

至于为什么它并不要求它是1,看看这个关于

sizeof(bool)
的相关问题。

如果您根本不清楚为什么这里涉及

bool
,那是因为您对 double 值调用
!
运算符,这相当于检查它是否非零,这样的检查会返回
bool 
。另外两个打印基本上是
sizeof(int)
(因为
int / int
本身就是
int
)和整数值。

© www.soinside.com 2019 - 2024. All rights reserved.