C语言的字长和标准大小

5
在这篇文章中,摘自书籍《Linux内核开发》: http://www.makelinux.net/books/lkd2/ch19lev1sec2
它说:

C长类型的大小保证是机器字长。然而,代码不能假设标准C类型具有任何特定大小。此外,int与long的大小没有保证相同。

问题是,我认为int与字长相同,而不是long,并且我找不到任何官方标准来定义这个说法。

有什么想法吗?


1
https://dev59.com/TXRB5IYBdhLWcg3wj32c - Rohit Vipin Mathews
1
许多问题与此相关,例如:C语言中类型的任何保证最小大小? 其中得票最高的答案将重定向到维基百科:C数据类型 - mouviciel
3个回答

7
有时候,网上的人是错误的。大小由ABI固定。Linux移植不一定会创建原始的ABI(通常会遵循另一个平台或制造商的建议),所以没有人保证int和long的准确性。术语“机器字”也非常模糊。

4
C语言的long类型大小保证等于机器字长,这在很多平台上都是错误的。例如,在嵌入式系统中,通常8位MCU(如HC08)具有8位字长,16位MCU(如MSP430)具有16位字长,但是在这些平台上long类型却是32位。在Windows x64(使用MSVC编译器),一个字的大小是64位,但long类型仍然是32位。

2
C标准不知道什么是单词,而C实现可能以不寻常的方式处理事情。所以你的书是错的。(例如,一些C实现可能在8位微控制器上使用64位的长整型)。
然而,C99标准定义了头文件,其中包含像intptr_t(与void*指针大小相同的整数类型)或int64_t(64位整数)等类型。
另请参见此问题,以及维基百科关于C数据类型的页面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接