在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;
{
...
}
我不明白这是否在语法上正确。我该怎么理解?
答案 0 :(得分:9)
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
总是会在任何体面的编译器上定义。