V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
acros
V2EX  ›  C

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

  •  
  •   acros · 2015-09-18 15:21:28 +08:00 · 1296 次点击
    这是一个创建于 3150 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看 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 做关键字完全没法搜索····
    9 条回复    2015-09-19 11:39:06 +08:00
    Cooky
        1
    Cooky  
       2015-09-18 15:31:24 +08:00
    完全不知道你在说什么 o.o
    acros
        2
    acros  
    OP
       2015-09-18 15:38:59 +08:00
    @Cooky 唔···· 上面表达得似乎有点乱。

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

    #ifndef OF
    #define OF "test"
    #endif

    int main ()
    {
    printf (OF );
    }

    输出: test
    Cooky
        4
    Cooky  
       2015-09-18 16:13:10 +08:00
    SAD ,现在也可以不写参数表,秀逗了……
    dandycheung
        5
    dandycheung  
       2015-09-18 17:12:52 +08:00   ❤️ 1
    看下这个帖子: http://bbs.csdn.net/topics/390266276 ,看是不是有关系。
    xunyu
        6
    xunyu  
       2015-09-18 17:45:44 +08:00 via Android
    说实话,我写了五年代码,没见过这个东西
    jkneedout
        7
    jkneedout  
       2015-09-18 19:40:21 +08:00 via iPhone
    @xunyu 同写了四年 ,也不认识 。
    XiaoxiaoPu
        8
    XiaoxiaoPu  
       2015-09-18 19:52:37 +08:00   ❤️ 1
    qian19876025
        9
    qian19876025  
       2015-09-19 11:39:06 +08:00
    @XiaoxiaoPu 看了你这个 上面的答案 感觉上 是 当年 为了 兼容调用 Pascal 的残留
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   845 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:38 · PVG 06:38 · LAX 15:38 · JFK 18:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.