C字大小和标准尺寸

时间:2012-04-03 07:08:48

标签: c long-integer ansi

在本文中,摘自“Linux内核开发”一书: http://www.makelinux.net/books/lkd2/ch19lev1sec2
它说:

  

C long类型的大小保证是机器的字大小。然而,在缺点方面,代码不能假设标准C类型具有任何特定大小。此外,无法保证int与long

的大小相同

问题是,我认为int与单词大小相同,不长,我找不到任何定义此说法的官方标准。

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

有时,互联网上的人是错误的。尺寸由ABI确定。 Linux端口不一定会创建原始ABI(通常会遵循其他平台或制造商建议),因此没有人对intlong做出保证。术语“机器词”也是非常不明确的。

答案 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页面。