在zlib 1.2.7,文件inffast.c,第320行,有一个我不明白的声明:
strm->avail_out = (unsigned)(out < end ?
257 + (end - out) : 257 - (out - end));
Run Code Online (Sandbox Code Playgroud)
变量end和out是两个指针到输出缓冲区.这种说法作出了努力来计算end - out的时候end > out和out - end当out >= end,但我不明白为什么会想这样做.在我看来,最终的结果是相同的,也就是说,这条线也可能已被写入:
strm->avail_out = 257 + (end - out);
Run Code Online (Sandbox Code Playgroud)
两个指针的区别有一个带符号的整数类型ptrdiff_t(C99 6.5.6:9),并且257有类型int.增加发生在这两者之间的更高等级的类型,我不知道三元运营商可能正在防范什么.