在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 

从那以后,两个版本都很容易生成。

如今,除了非常古老的编译器之外,不再需要这种黑客攻击了。