две вещи, представляющие интерес в этом коде слова local
и OF
.
Слово local
является #define
d по static
по умолчанию в gzguts.h
. Комментарий объясняет, почему:
#ifndef local
# define local static
#endif
/* compile with -Dlocal if your debugger can't find static symbols */
Таким образом, мы получаем, что кто-то в какой-то момент в прошлом, пришлось использовать отладчик, который не обрабатывать статические функции хорошо. Вы можете скомпилировать zlib со всеми функциями global, чтобы обойти эту проблему.
Слово OF
является #define
d в zconf.h
:
#ifndef OF /* function prototypes */
# ifdef STDC
# define OF(args) args
# else
# define OF(args) ()
# endif
#endif
Это определение позволяет Zlib быть скомпилирован с предварительно ANSI-стандартных компиляторов, которые не поддерживают прототипы функций. В пред-ANSI C объявление функции должно было выглядеть так:
uLong unzlocal_SearchCentralDir();
независимо от параметров, которые выполняет функция. Этот макрос позволяет объявлять функции с помощью списков аргументов прототипов, но списки аргументов исключаются, если компилятор не поддерживает ANSI C.
OF, вероятно, является макросом, который удаляет прототип на очень старых компиляторах. –