在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(VALUE obj) VALUE obj; # what the hack is this? { ... }
这是K&R C.没有人再使用它了.它至少已被弃用了20年.
很久以前,函数定义写得像这样:
int myfunc(myparam) int myparam; { ... }
代替
int myfunc(int myparam) { ... }
所以HAVE_PROTOTYPES
总会在任何体面的编译器上定义.