V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
acros
V2EX  ›  C

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

  •  
  •   acros · Sep 18, 2015 · 1904 views
    This topic created in 3887 days ago, the information mentioned may be changed or developed.
    看 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 replies    2015-09-19 11:39:06 +08:00
    Cooky
        1
    Cooky  
       Sep 18, 2015
    完全不知道你在说什么 o.o
    acros
        2
    acros  
    OP
       Sep 18, 2015
    @Cooky 唔···· 上面表达得似乎有点乱。

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

    #ifndef OF
    #define OF "test"
    #endif

    int main ()
    {
    printf (OF );
    }

    输出: test
    Cooky
        4
    Cooky  
       Sep 18, 2015
    SAD ,现在也可以不写参数表,秀逗了……
    dandycheung
        5
    dandycheung  
       Sep 18, 2015   ❤️ 1
    看下这个帖子: http://bbs.csdn.net/topics/390266276 ,看是不是有关系。
    xunyu
        6
    xunyu  
       Sep 18, 2015 via Android
    说实话,我写了五年代码,没见过这个东西
    jkneedout
        7
    jkneedout  
       Sep 18, 2015 via iPhone
    @xunyu 同写了四年 ,也不认识 。
    qian19876025
        9
    qian19876025  
       Sep 19, 2015
    @XiaoxiaoPu 看了你这个 上面的答案 感觉上 是 当年 为了 兼容调用 Pascal 的残留
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3018 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 08:28 · PVG 16:28 · LAX 01:28 · JFK 04:28
    ♥ Do have faith in what you're doing.