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

时间:2012-11-12 11:49:11

标签: compiler-construction primitive-types

#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 但他们无法回答我的问题!

1 个答案:

答案 0 :(得分:1)

这个问题是一个复杂的方法,可以问为什么sizeof(bool)在某些编译器中为1,在其他编译器中为2。事实上,C ++标准不要求bool的大小为1,这意味着不同的编译器可能会为它分配不同的大小,这就是你问题的答案。

至于为什么它不要求它为1,take a look at this related question about sizeof(bool)

如果你不清楚为什么bool在这里涉及,那是因为你在一个double值上调用!运算符,这相当于检查它是否为非零,等等支票返回bool。其他两个打印基本上是sizeof(int)(因为int / int本身是int)和整数的值。