Chr*_*oph 51
根据1999 ISO C标准(C99),size_t
是一个至少为16位的无符号整数类型(参见第7.17和7.18.3节).
该标准还建议,size_t
不应该有一个整数转换等级大于long
如果可能的话,即铸造size_t
到unsigned long
,如果该建议得到遵循,是没有问题的.
1989 ANSI C标准(ANSI C)未提及最小尺寸或推荐的转换等级.
1998 ISO C++标准(C++ 98)(以及当前的C++ 0x草案)指的是C标准.第18.1节内容如下:
内容与标准C库头
<stddef.h>
[...]相同
根据第1.2节,这意味着1990年ISO C标准(C90)定义的图书馆,包括1995年的第一次修订(C95):
ISO/IEC 9899:1990的第7节中描述的库和ISO/IEC 9899/Amd.1:1995的第7节在下文中称为标准C库.
有关的部分size_t
应继承自ANSI C:Frontmatter和部分编号,C90和ANSI C的标准是相同的.我需要一份规范修正案的副本,以确保没有任何相关的修改stddef.h
,但我对此表示怀疑.似乎引入了最小尺寸stdint.h
,即C99.
还请考虑C++ 98第1.2节中的以下引用:
所有标准都可以修订,鼓励根据本国际标准达成协议的各方研究是否可以应用下列标准的最新版本.
Meh*_*ari 49
是的.它通常被定义为类似以下内容(在32位系统上):
typedef unsigned int size_t;
Run Code Online (Sandbox Code Playgroud)
参考:
C++标准第18.1节定义的size_t
内容<cstddef>
在C标准中描述为<stddef.h>
.
C标准第4.1.5节定义size_t
为sizeof
运算符结果的无符号整数类型
根据标准,它是无符号的,但我记得一些较旧的实现使用了带有签名类型的typedef.
来自较旧的GCC文档:
在版本2.4之前,size_t类型和GCC版本存在潜在问题.ANSI C要求
size_t
始终为无符号类型.为了与现有的系统的头文件兼容性,GCC限定size_t
在stddef.h
为任何类型系统的sys/types.h
定义的那样.定义大多数Unix系统size_t
中sys/types.h
,定义它是一个符号的类型.库中的某些代码依赖于size_t
无符号类型,如果签名则无法正常工作
我不确定防范这一点有多重要.我的代码假定它是未签名的.