在iowin32.h中的宏
我无法理解minizip的iowin32.h中的以下行:
void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
( 来源 ,过时但仍然相关)
OF
宏有什么作用?
名称OF
可能是Old function declaration
的缩写。
在80年代甚至更早的旧时代,此function的典型声明如下所示:
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
从那以后,两个版本都很容易生成。
如今,除了非常古老的编译器之外,不再需要这种黑客攻击了。