В zlib 1.2.7, файле inffast.c, строка 320, есть инструкция, которую я не понимаю:
strm->avail_out = (unsigned)(out < end ?
257 + (end - out) : 257 - (out - end));
Переменные end
и out
являются двумя указателями в выходной буфер.
Этот оператор пытается вычислить end - out
, когда end > out
и out - end
, когда out >= end
, но я не понимаю, почему это может понадобиться. Мне кажется, что конечный результат тот же, т.е. Строка также может быть написана:
strm->avail_out = 257 + (end - out);
Разность двух указателей имеет подписанный интегральный тип ptrdiff_t
(C99 6.5.6: 9), а 257
имеет тип int
. Добавление происходит в типе более высокого ранга между этими двумя, и я не вижу, что троичный оператор мог бы защищать.