2012-02-24 2 views
1
local uLong unzlocal_SearchCentralDir OF((
    const zlib_filefunc_def* pzlib_filefunc_def, 
    voidpf filestream)); 

local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream) 
    const zlib_filefunc_def* pzlib_filefunc_def; 
    voidpf filestream; 
{ 

... источник отдыха.Какой синтаксис C используется кодом?

Вышеупомянутый источник C - от unzip.c.

Мне интересно, что такое синтаксис линии прототипа функции? Особенно, где используется ключ «OF» или для чего он предназначен?

+0

OF, вероятно, является макросом, который удаляет прототип на очень старых компиляторах. –

ответ

1

две вещи, представляющие интерес в этом коде слова 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.

+0

THX для ответа! – pandakweb

3

Seach через заголовки для линии:

#define OF(x) ... 

Здесь x и ... может быть что-то еще. OF не является ключевым словом, это макрос. От "zconf.h":

#ifndef OF /* function prototypes */ 
# ifdef STDC 
# define OF(args) args 
# else 
# define OF(args) () 
# endif 
#endif 

Это используется, чтобы тот же код для компиляции на обоих компиляторов ANSI C (1989 или более недавние) и компиляторов до ANSI C (до 1989 года). Нам больше не нужны старые компиляторы, но zlib существует уже давно (с 1995 года), и они еще не отказались от поддержки старых компиляторов. Подобные определения вы найдете в LibPNG.

В 1995 году DOS все еще была довольно распространена на рабочем столе. Теперь нет никакого использования программирования.

+0

THX для ответа! – pandakweb

1

Было выполнено макроопределение для успешной работы с несколькими компиляторами.

local, без сомнения, #define local static на большинстве платформ.

OF оставляет параметры без изменений на большинстве современных компиляторов, но со старыми K & параметров типа R-только, было бы реорганизовать unzlocal_SearchCentralDir OF(const zlib_filefunc_def* pzlib_filefunc_def, voidpf filestream) в

unzlocal_SearchCentralDir (pzlib_filefunc_def, filestream) 
     const zlib_filefunc_def* pzlib_filefunc_def; 
     voidpf filestream; 
    { // begin function body... 
+0

THX для ответа! – pandakweb

Смежные вопросы