C11标准写道:
6.2.5 类型,¶4:
有五个标准有符号整数类型,指定为signed char
, short int
, int
, long int
, and long long int
.
因此,五种标准无符号整数类型将是unsigned char
, unsigned short int
, unsigned int
, unsigned long int
, and unsigned long long int
.
7.19 通用定义<stddef.h>
, ¶1-2:
标题<stddef.h>
[...] 声明以下类型。
[...]size_t
这是结果的无符号整数类型sizeof
操作员
演讲内容为cppreference.com https://en.cppreference.com/w/cpp/types/size_t
typedef /*实现定义*/ size_t;
暗示size_t
总是通过 a 定义typedef
,以及一些答案这个问题 https://stackoverflow.com/q/2550774/2057969声明/暗示/假设它通过 a 被定义为五种标准无符号整数类型之一(见上文)typedef
.
但不能size_t
也可以定义为特定宽度整数类型之一(C11 标准,7.20 整数类型<stdint.h>
), 例如uint32_t
? (顺便问一下,它们叫什么?将它们称为“固定宽度整数类型”。 C11 标准偶尔会使用“扩展整数类型”这一表达方式,尽管我在 7.20 中找不到这方面的显着定义。)Must size_t
被定义为使用typedef
作为五种标准无符号整数类型之一?或者可以将其定义为特定宽度整数类型之一吗?或者它可以是一个完全独立的类型吗?答案是根据标准中的什么措辞得出的?
Edit:我找到了有关此主题的相关引用(国际标准的基本原理 - 编程语言 - C,修订版 5.10(2003 年 4 月),6.5.3.4sizeof
操作员):
的类型sizeof
,无论它是什么,都会被发布(在库标题中<stddef.h>
) as size_t
,因为程序员能够引用此类型很有用。这个要求隐含地限制了size_t
成为现有无符号整数类型的同义词。
Edit:列出的整数类型维基百科上的 C 标准中称为“指定宽度整数类型”(我检查了 C99 和 C17 版本)。
有一个这个问题的C++版本 https://stackoverflow.com/q/23749822/2057969在 Stack Overflow 上,但我无法推断出 C 的明确答案。