据我所知,在32位编译器的c ++中,int = __int32 = long = DWORD。但为什么这么多?为什么不只是一个?
如果我选择一个名字,int32似乎是最合适的,因为它没有混淆它可能是什么。
答案 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
不是long
。 DWORD
是一个双字是准确的。一个字称为2个字节,因此DWORD
必须是其中两个。
__intXX
是Microsoft特有的。
答案 2 :(得分:0)
这是因为它们代表了不同的类型,可以翻译成不同的大小。
int
是默认的'整数'并且未指定其大小。long
是一个更长的版本整数'它可以占用更大的字节数。在32位编译器上,它仍然是4字节整数。 A'漫长的'类型,在Windows上,我记得是__int64是64位。DWORD
是Microsoft引入的类型。这是一个双字',其中,当时的字意味着'两个字节' 当知道你需要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名称通常也是一个好主意。这假设你完全关心 - 只要你不依赖它们就可以使用int
,long
等等,for(i = 0; i < 10; i++) x += i;
可以使用i
{1}}和x
是任何整数类型 - 总和甚至低于128,因此char
可以正常工作。在这里使用int
会很好,因为它可能是一个“快速”类型。在某些体系结构中,使用long
可能会使代码变慢 - 特别是在16位体系结构中,long
占用两个16位字,需要使用(通常)两个或多个操作来处理加法和减法例如。这可能会在敏感的地方减慢代码速度。