在 zlib 1.2.7,文件 inffast.c,第 320 行,有一句我不明白的语句:
strm->avail_out = (unsigned)(out < end ?
257 + (end - out) : 257 - (out - end));
变量end
和out
是指向输出缓冲区的两个指针。该语句努力计算end - out
whenend > out
和out - end
when out >= end
,但我不明白它为什么要这样做。在我看来,最终结果是一样的,也就是说,这行还不如写成:
strm->avail_out = 257 + (end - out);
两个指针的差值具有带符号整数类型ptrdiff_t
(C99 6.5.6:9),并且257
具有int
. 添加发生在这两者之间的更高级别的类型中,我看不出三元运算符可能会防范什么。