Nat*_*lin 9 c winapi window zlib
我无法理解minizip的iowin32.h中的以下行:
void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
Run Code Online (Sandbox Code Playgroud)
(来源,过时但仍然相关)
什么是OF宏吗?
Rol*_*lig 12
该名称OF可能是.的缩写Old function declaration.
在80年代甚至更早的旧时代,这个功能的典型声明如下所示:
fill_win32_filefunc();
Run Code Online (Sandbox Code Playgroud)
而已.没有显式返回类型,没有声明的参数.返回类型int默认情况下,参数无关紧要,因为调用者(希望)无论如何都会传递正确数据类型的值.
后来的版本引入了void类型,因此声明可能如下所示:
void fill_win32_filefunc();
Run Code Online (Sandbox Code Playgroud)
当ANSI C89问世时,它引入了函数参数的声明.现在一个好的宣言看起来像这样:
void fill_win32_filefunc(zlib_filefunc_def* pzlib_filefunc_def);
Run Code Online (Sandbox Code Playgroud)
在1989年之后的早期,有很多代码需要结合这两种风格.因此发明了宏OF(或有时_P或另一个名称).它的定义通常是:
#if PRE_ANSI_C89
# define OF(args) ()
#else
# define OF(args) args
#endif
Run Code Online (Sandbox Code Playgroud)
从那以后,两个版本都很容易生成.
如今,除了非常旧的编译器之外,不再需要这种黑客攻击了.