【问题标题】:Why in Turbo C compiler sizeof(int) is 2 bytes and in gcc Linux compiler is 4 byte? [duplicate]为什么在 Turbo C 编译器中 sizeof(int) 是 2 字节,而在 gcc Linux 编译器中是 4 字节? [复制]
【发布时间】:2015-10-01 07:11:06
【问题描述】:

为什么在 Turbo C 编译器中 sizeof(int) 是 2 个字节,而在 gcc Linux 编译器中是 4 个字节?

【问题讨论】:

  • 不要使用 TurboC。它是过时的、不符合标准的、给出糟糕的诊断并产生糟糕的代码。使用一些好的免费软件编译器,如GCCClang/LLVM。如果您还没有 Linux,请考虑在您的 PC 上安装它。
  • 为什么所有这些反对票?这是一个合理的问题,不是吗?
  • @alk 我没有得到有效问题的反对票
  • 如果允许,我会回答。 int 最初应该是机器的本机字长,Turbo C 为没有 32 位指令的 8086 和 80286 机器生成代码。事实上,16 位机器上的 Linux 也有 GCC 目标。

标签: c integer sizeof turbo-c


【解决方案1】:

sizeof(int) 并非在所有平台上都是常量。

因系统而异。

PS:只有在所有平台上都保持不变的 sizeof 对象是 sizeof(char)

【讨论】:

    【解决方案2】:

    sizeof(int) 因机器而异(有时因编译器而异)。

    通常sizeof(int)代表CPU的“自然”字宽。但是如果你的编译器在 x64 机器上作为 x86 程序运行,即使这个假设也会失效。

    【讨论】:

    • "...sizeof(int) 代表..." 第一,当您添加自己时,这是不正确的,第二,这不能回答问题。
    • @alk 请看“通常”这个词。你知道很多反例吗?
    【解决方案3】:

    MSDOS 中的指令代码是16 bit | 2 Bytes
    因此,最大整数值为 16bit 整数。

    到目前为止我分析的内容:

    关键字int 因编译器而异。 Turbo C 是一个16 bit 编译器,因此它将代码编译为处理器的16 bit 机器代码!

    众所周知,编译器会将代码转换为机器码才能工作。
    GCC 也是如此。

    我们今天使用的计算机要么是32/64 bit。


    编译器应支持使任何应用程序工作的架构。

    • GCC32/64 bit 编译器。所以,sizeof(int)4 Bytes
    • Turbo C16bit 编译器。所以,sizeof(int)2 Bytes

    【讨论】:

      猜你喜欢
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 2012-07-11
      • 2010-10-27
      • 2010-12-18
      相关资源
      最近更新 更多