问个(上古时代的)C 编译器处理问题, OF 这个保留字怎么来的?

2015-09-18 15:21:28 +08:00
 acros
看 unzip 的代码,函数格式都是这样的:
unzFile unzOpen64 OF ((const void *path ));

查了下 OF 是说为兼容旧编译器保留的,有些老编译器可能需要#define OF (x ) (),不知道是哪个上古时期的玩意。
我猜是 C99 之后应该都是#define OF (x ) x 了。现在编译器会自动识别这个OF? 因为代码里面高亮显示
#ifndef OF
#define OF _Z_OF
#endif
这几行没有生效,似乎编译器已检查过OF了。

那‘ OF ’最初是怎么一回事,为什么会出来这么奇怪的设计?现在应该完全淘汰了吧,但是说明也找不到几句, OF 做关键字完全没法搜索····
1378 次点击
所在节点    C
9 条回复
Cooky
2015-09-18 15:31:24 +08:00
完全不知道你在说什么 o.o
acros
2015-09-18 15:38:59 +08:00
@Cooky 唔···· 上面表达得似乎有点乱。

我猜测很久以前 C 编译函数声明不支持写参数列表,后来强制要求声明写参数,为了兼容旧编译器,大家约定了个 OF 的宏。
我也是第一次注意到函数声明写成这样子的,不知道现实 C 编译器标准有没有提到这事。
Cooky
2015-09-18 16:10:22 +08:00
@acros 记得书上有说以前函数声明可以不写参数表,不过应该是非常非常久以前了吧……
手头没编译器,拿 TCC 试了试
#include <stdio.h>

#ifndef OF
#define OF "test"
#endif

int main ()
{
printf (OF );
}

输出: test
Cooky
2015-09-18 16:13:10 +08:00
SAD ,现在也可以不写参数表,秀逗了……
dandycheung
2015-09-18 17:12:52 +08:00
看下这个帖子: http://bbs.csdn.net/topics/390266276 ,看是不是有关系。
xunyu
2015-09-18 17:45:44 +08:00
说实话,我写了五年代码,没见过这个东西
jkneedout
2015-09-18 19:40:21 +08:00
@xunyu 同写了四年 ,也不认识 。
XiaoxiaoPu
2015-09-18 19:52:37 +08:00
qian19876025
2015-09-19 11:39:06 +08:00
@XiaoxiaoPu 看了你这个 上面的答案 感觉上 是 当年 为了 兼容调用 Pascal 的残留

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/221759

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX