【问题标题】:Why do we get different results/outputs on different compilers?为什么我们在不同的编译器上得到不同的结果/输出?
【发布时间】:2012-11-12 11:49:10
【问题描述】:
#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 但他们无法回答我的问题!

【问题讨论】:

  • 标准规定 sizeof(char) 为一。除此之外,它只指定类型大小之间的关系,因此它们在不同的平台和工具链上会有所不同。
  • VS2010/gcc中%d是怎么变成char的???
  • char%d 对于您提出的问题都不是很重要。我只是在谈论标准中的内容。请参阅 Oak 的回答。

标签: compiler-construction primitive-types


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多