gpt4 book ai didi

c - 为什么 ptrdiff_t 与 long long 不同?

转载 作者:太空狗 更新时间:2023-10-29 16:05:51 25 4
gpt4 key购买 nike

根据当前的 C 标准,指针之间的差异类型为 ptrdiff_t。同时,按照标准,数组的下标可以是任意整数类型,目前最大的有符号整数类型是long long

如果ptrdiff_t不是long long,而是更小,那么上面两个说法就矛盾了,不是吗?

那为什么标准要引入类型ptrdiff_t而不只是使用long long作为指针差异?

最佳答案

首先,ptrdiff_t 是有符号类型(两个指针之间的差可以是负数),因此排除了 unsigned long long

数组下标可以是任何整数类型,但结果值必须在边界内。例如,在 32 位平台上,您不能拥有包含超过 40 亿个元素的数组,因此 ptrdiff_t 可能是 32 位整数类型。使用超过 32 位的 long long 值索引数组只会导致未定义的行为(ouf of bounds access)。

和往常一样,真正的原因是向后兼容性:long long 是在 ptrdiff_t 很久之后添加到语言中的,而 ptrdiff_t 是在 ptrdiff_t 之后添加的编译器已经写好了。当现有代码依赖于(几十年前的)行为时,为指针算法指定完全不同的规则(例如“减去两个指针必须产生 64 位以上的结果”)是没有意义的。

关于c - 为什么 ptrdiff_t 与 long long 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40964353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com