【发布时间】:2016-04-11 13:01:23
【问题描述】:
在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;
{
...
}
我不明白这在语法上是否正确。应该怎么理解?
【问题讨论】:
-
顺便说一下,应该是
static inline int rb_type(obj)而不是(VALUE obj)。 -
HAVE_PROTOTYPES是 0 还是 1,仍然是定义的。 -
是K&R声明风格
-
请相应地标记 Ruby 1.8 问题。