在本文中,摘自“Linux内核开发”一书:
http://www.makelinux.net/books/lkd2/ch19lev1sec2
它说:
C long类型的大小保证是机器的字大小。然而,在缺点方面,代码不能假设标准C类型具有任何特定大小。此外,无法保证int与long
的大小相同
问题是,我认为int与单词大小相同,不长,我找不到任何定义此说法的官方标准。
有什么想法吗?
答案 0 :(得分:6)
有时,互联网上的人是错误的。尺寸由ABI确定。 Linux端口不一定会创建原始ABI(通常会遵循其他平台或制造商建议),因此没有人对int
和long
做出保证。术语“机器词”也是非常不明确的。
答案 1 :(得分:3)
C long类型的大小保证是机器的字大小。
这对许多平台来说都是错误的。例如,在嵌入式世界中,通常8位MCU(例如,HC08)具有8位字大小,而16位MCU(例如,MSP430)具有16位字大小但long
是32-在这些平台上。在Windows x64(MSVC编译器)中,字的大小为64位,但long
为32位。
答案 2 :(得分:1)
C标准不知道单词是什么,C实现可能以不寻常的方式做事。所以你的书错了。 (例如,某些C实现可能在8位微控制器上使用64位long
。
但是,C99标准定义了<stdint.h>
标头,类型为intptr_t
(与void*
指针大小相同的整数类型)或int64_t
(64位)整数)等。
另请参阅this question和维基百科的C data types页面。