Макрос OF в iowin32.h - PullRequest
       16

Макрос OF в iowin32.h

9 голосов
/ 04 сентября 2011

Я не могу понять следующую строку из iowin32.h из minizip:

void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));

( Источник , устаревший, но все еще актуальный)

Что означает OF макрос сделать?

1 Ответ

12 голосов
/ 04 сентября 2011

Имя OF может быть сокращением для Old function declaration.

В старые времена 80-х и даже раньше типичное объявление для этой функции выглядело так:

fill_win32_filefunc();

Вот и все.Нет явного возвращаемого типа, нет объявленных параметров.Тип возвращаемого значения - int по умолчанию, и параметры не имеют значения, так как вызывающая сторона (надеюсь) все равно передаст значения правильных типов данных.

Более поздние версии представили тип voidпоэтому объявление может выглядеть так:

void fill_win32_filefunc();

И когда вышел ANSI C89, он ввел объявление параметров функции.Теперь хорошая декларация выглядела так:

void fill_win32_filefunc(zlib_filefunc_def* pzlib_filefunc_def);

В начале 1989 года было много кода, который должен был объединить эти два стиля.Поэтому был изобретен макрос OF (или иногда _P или с другим именем).Его определение обычно таково:

#if PRE_ANSI_C89
#  define OF(args) ()
#else
#  define OF(args) args
#endif

Исходя из этого, обе версии генерируются легко.

В настоящее время этот хак больше не нужен, за исключением очень очень старых компиляторов.

...