gpt4 book ai didi

c - 为什么 zlib 努力只计算正指针差异?

转载 作者:太空狗 更新时间:2023-10-29 16:40:48 26 4
gpt4 key购买 nike

在zlib 1.2.7中,文件inffast.c,第320行,有一句我看不懂:

strm->avail_out = (unsigned)(out < end ?
257 + (end - out) : 257 - (out - end));

变量endout 是指向输出缓冲区的两个指针。当 end > out 时,此语句努力计算 end - outout >= end 时计算 out - end >,但我不明白它为什么要这样做。在我看来,最终结果是一样的,也就是说,这行还不如写成:

strm->avail_out = 257 + (end - out);

两个指针的差值有一个有符号整数类型,ptrdiff_t (C99 6.5.6:9),257 有类型int .添加发生在这两者之间更高等级的类型中,我看不出三元运算符可能在防范什么。

最佳答案

您的观察对于 C99 以及 C89/C90 都是正确的。

那一行代码是十年前写的。在这一点上,我的内存只允许我以偏执狂为借口。显然我担心在某些编译器中减去两个指针的结果可能是无符号的。我不记得这种担忧的起源,或者它是否有任何根据。

至于change history ,就像你今天看到的那样,那行代码是从 Zeus 的眉间诞生的。自编写以来一直未更改。

关于c - 为什么 zlib 努力只计算正指针差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14374437/

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