В этом коде интересны две вещи: слова 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 со всеми глобальными функциями, чтобы обойти эту проблему.
Слово 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.