gpt4 book ai didi

c - 这是什么宏?

转载 作者:数据小太阳 更新时间:2023-10-29 07:12:40 25 4
gpt4 key购买 nike

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 将始终在任何合适的编译器上定义。

关于c - 这是什么宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34650054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com