当前位置:  开发笔记 > 后端 > 正文

这个宏是什么?

如何解决《这个宏是什么?》经验,为你挑选了1个好方法。

ruby.h,有很多功能宏定义如下:

static inline int
    #if defined(HAVE_PROTOTYPES)
    rb_type(VALUE obj)
    #else
    rb_type(obj)
       VALUE obj;
    #endif
    {
        if (FIXNUM_P(obj)) return T_FIXNUM;
        if (obj == Qnil) return T_NIL;
        if (obj == Qfalse) return T_FALSE;
        if (obj == Qtrue) return T_TRUE;
        if (obj == Qundef) return T_UNDEF;
        if (SYMBOL_P(obj)) return T_SYMBOL;
        return BUILTIN_TYPE(obj);
    }

如果HAVE_PROTOTYPES==1,根据我的理解,这个功能将是这样的:

static inline int rb_type(VALUE obj)
{
   ...
}

然而,如果HAVE_PROPOTYPES==0,函数定义将是这样的:

static inline int rb_type(VALUE obj)
      VALUE obj;
{
    ...
}

我不明白这是否在语法上是正确的.我该怎么理解呢?



1> Jabberwocky..:
static inline int rb_type(VALUE obj)
      VALUE obj;    # what the hack is this?
{
    ...
}

这是K&R C.没有人再使用它了.它至少已被弃用了20年.

很久以前,函数定义写得像这样:

int myfunc(myparam)
  int myparam;
{
   ...
}

代替

int myfunc(int myparam)
{
   ...
}

所以HAVE_PROTOTYPES总会在任何体面的编译器上定义.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有