为什么相同类型的数据单元有不同的名称?

时间:2014-03-11 23:42:25

标签: c++ types

据我所知,在32位编译器的c ++中,int = __int32 = long = DWORD。但为什么这么多?为什么不只是一个?

如果我选择一个名字,int32似乎是最合适的,因为它没有混淆它可能是什么。

4 个答案:

答案 0 :(得分:3)

  • int是一种前C99类型,保证至少为16位,但在大多数现代架构中为32位。 (它原本打算成为“原生”字大小,但即使在64位架构上,它通常仍然是32位,主要是出于向后兼容的原因。)
  • long是前C99类型,保证至少为32位,但允许更宽。 (很少有编译器使其更长,即使在64位架构上,主要是出于向后兼容的原因。)
  • __int32 / __int32_t是一个非标准的typedef,由许多C编译器和运行时库实现,以保证C99之前的固定宽度。
  • int32_t是C99类型,保证正好是32位。
  • DWORD是来自原始Windows API的typedef,保证正好是32位,从没有语言定义类型的32位开始。

所以基本上,说“32位整数”的大量方法来自C如何在标准化固定宽度类型上拖延,以及32位处理器占据领域的长期任期,导致每个人将32位标准化为“正常”整数大小。

答案 1 :(得分:1)

由于遗留应用程序。 int根本没有描述 big 的含义。它是一个整数。很重要。

在16位时代,int不是longDWORD是一个双字是准确的。一个字称为2个字节,因此DWORD必须是其中两个。

__intXX是Microsoft特有的。

答案 2 :(得分:0)

这是因为它们代表了不同的类型,可以翻译成不同的大小。

  1. int是默认的'整数'并且未指定其大小。
  2. `INT32'说它是32位(四字节整数)
  3. long是一个更长的版本整数'它可以占用更大的字节数。在32位编译器上,它仍然是4字节整数。 A'漫长的'类型,在Windows上,我记得是__int64是64位。
  4. DWORD是Microsoft引入的类型。这是一个双字',其中,当时的字意味着'两个字节'
  5. 知道你需要32位整数时,你选择int32是好的。

答案 3 :(得分:0)

因此,为什么不同的项目(例如Microsoft Windows)使用不同的类型有很多不同的原因。

如果编译器TODAY通常是32位,那么情况并非总是如此。还有64位编译器。

术语DWORD源于Windows是一个16位分段模式应用程序(许多成员可能从未在16位分段模式环境中工作)。它是“两个16位字”,至少在这几天被视为无符号的32位值。

类型int32_t由C标准文档定义(并且通过继承,也在C ++中)。如果它实际上只是32位,那么它是唯一存在的。在具有36位字的计算机上,没有int32_t(有int32_least_t,它应该存在于支持至少32位的所有系统上)。

long在Windows 32位或64位编译器中为32位,在Linux 64位编译器中为64位,在Linux 32位编译器中为32位。所以它绝对是“可变大小”。

选择类型的OWN名称通常也是一个好主意。这假设你完全关心 - 只要你不依赖它们就可以使用intlong等等,for(i = 0; i < 10; i++) x += i;可以使用i {1}}和x是任何整数类型 - 总和甚至低于128,因此char可以正常工作。在这里使用int会很好,因为它可能是一个“快速”类型。在某些体系结构中,使用long可能会使代码变慢 - 特别是在16位体系结构中,long占用两个16位字,需要使用(通常)两个或多个操作来处​​理加法和减法例如。这可能会在敏感的地方减慢代码速度。