zlib 1.2.7 のファイル inffast.c の 320 行目に、私が理解できないステートメントがあります。
strm->avail_out = (unsigned)(out < end ?
257 + (end - out) : 257 - (out - end));
変数end
とout
は、出力バッファーへの 2 つのポインターです。このステートメントはend - out
whenend > out
とout - end
whenを計算しようとout >= end
しますが、なぜそれが必要なのかわかりません。最終結果は同じように思えます。
strm->avail_out = 257 + (end - out);
2 つのポインターの違いには、符号付き整数型ptrdiff_t
(C99 6.5.6:9) があり、257
型はint
です。加算は、これら 2 つの間の上位の型で行われ、三項演算子が何を防いでいる可能性があるのか わかりません。