C 我可以信任sizeof(size_t)<;=sizeof(unsigned long int)是否始终为真?
根据1999年的ISO C标准(C99),size\u t是一种至少16位的无符号整数类型(见第7.17节和第7.18.3节)。 因此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
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
作为参考,我认为我的答案仍然有效。