C 我可以信任sizeof(size_t)<;=sizeof(unsigned long int)是否始终为真?

C 我可以信任sizeof(size_t)<;=sizeof(unsigned long int)是否始终为真?,c,size-type,C,Size Type,根据1999年的ISO C标准(C99),size\u t是一种至少16位的无符号整数类型(见第7.17节和第7.18.3节)。 因此sizeof(size\u t)sizeof(unsigned long int)不正确,可能导致数据丢失。例如: size_t a = b; 如果b是无符号长整数,则可能会导致数据丢失,因为其值可能大于大小所能容纳的值 根据1999年ISO C标准(C99),size\u t是至少16位的无符号整数类型(参见第7.17节和第7.18.3节)。 因此sizeof

根据1999年的ISO C标准(C99),size\u t是一种至少16位的无符号整数类型(见第7.17节和第7.18.3节)。

因此
sizeof(size\u t)sizeof(unsigned long int)
不正确,可能导致数据丢失。例如:

size_t a = b;

如果
b
无符号长整数
,则可能会导致数据丢失,因为其值可能大于
大小
所能容纳的值

根据1999年ISO C标准(C99),size\u t是至少16位的无符号整数类型(参见第7.17节和第7.18.3节)。

因此
sizeof(size\u t)sizeof(unsigned long int)
不正确,可能导致数据丢失。例如:

size_t a = b;

如果
b
无符号长整数
,则可能会导致数据丢失,因为其值可能大于
大小
所能容纳的值

关于
size\t
C89中的整数类型发生了什么,最好的解释可能是它的基本原理文档。仔细阅读本文件第3.4.4节:

第三段说:

sizeof的类型(无论是什么类型)已发布(在库中 头)作为大小,因为它对程序员很有用 以便能够引用此类型。这一要求是含蓄的 将大小\u t限制为现有无符号整数的同义词 类型,从而消除了最大的可声明对象 可能太大,即使使用未签名的长字符也无法跨越

这意味着,对于C89,通常
size\u t
与先前存在的
无符号
整数类型相同,C89中的内容意味着
无符号字符、无符号短字符、无符号整数、无符号长字符中的一种
特别是,
size\u t
类型的每个值都在
无符号长
的范围内

通过阅读标准C89的规范,您还可以看到,
sizeof(size_t)也许对
size_t
C89中的整数类型发生了什么最好的解释就是它的基本原理文档。仔细阅读本文件第3.4.4节:

第三段说:

sizeof的类型(无论是什么类型)已发布(在库中 头)作为大小,因为它对程序员很有用 以便能够引用此类型。这一要求是含蓄的 将大小\u t限制为现有无符号整数的同义词 类型,从而消除了最大的可声明对象 可能太大,即使使用未签名的长字符也无法跨越

这意味着,对于C89,通常
size\u t
与先前存在的
无符号
整数类型相同,C89中的内容意味着
无符号字符、无符号短字符、无符号整数、无符号长字符中的一种
特别是,
size\u t
类型的每个值都在
无符号长
的范围内

通过阅读标准C89的规范,您还可以看到
sizeof(size\u t)您的答案似乎模棱两可,因为您的断言
sizeof(size\u t)sizeof(unsigned long int)
总是错误的,但您暗示“这可能是真的”。除了面具问C89的标准,而不是C89。修正:“而不是C99”@pablo1977它不是含糊不清的,它实际上是错的。我会解决的。关于这个标准,我知道,但是由于
long int
和其他被定义为
int
作为参考,我认为我的答案仍然有效。你的答案似乎模棱两可,因为你的断言
sizeof(size\u t)sizeof(unsigned long int)
总是错误的,但你暗示“这可能是真的”。除了面具问C89的标准,而不是C89。修正:“而不是C99”@pablo1977它不是含糊不清的,它实际上是错的。我会解决的。关于这个标准,我知道,但是由于
long int
和其他被定义为
int
作为参考,我认为我的答案仍然有效。