我无法理解来自minizip的iowin32.h文件中的以下一行:
void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
(源代码,虽然过时但仍然相关)
OF
宏的作用是什么?
我无法理解来自minizip的iowin32.h文件中的以下一行:
void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
(源代码,虽然过时但仍然相关)
OF
宏的作用是什么?
名字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
从那时起,两个版本都很容易生成。
现在,这种技巧已不再需要,除了非常古老的编译器之外。