作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我无法理解 minizip 的 iowin32.h 中的以下行:
void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
( Source ,过时但仍然相关)
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
由此,可以轻松生成两个版本。
现在,除了非常非常旧的编译器之外,不再需要这种 hack。
关于c - iowin32.h 中的 OF 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7299310/
我是一名优秀的程序员,十分优秀!