【发布时间】:2011-03-02 06:24:54
【问题描述】:
我最近在玩 GNU Bison 时看到了一些这样的函数定义:
static VALUE
ripper_pos(self)
VALUE self;
{
//code here
}
为什么self的类型在括号外?这是有效的 C 吗?
【问题讨论】:
标签: c function definition
我最近在玩 GNU Bison 时看到了一些这样的函数定义:
static VALUE
ripper_pos(self)
VALUE self;
{
//code here
}
为什么self的类型在括号外?这是有效的 C 吗?
【问题讨论】:
标签: c function definition
那些是旧的 K&R 风格的函数参数声明,分别声明参数的类型:
int func(a, b, c)
int a;
int b;
int c;
{
return a + b + c;
}
这与更现代的声明函数参数的方式相同:
int func(int a, int b, int c)
{
return a + b + c;
}
“新风格”声明基本上是普遍首选的。
【讨论】:
这是声明函数参数的所谓“旧”变体。在过去,您不能只在括号内编写参数类型,而是必须在右括号之后为每个参数定义它。
也就是说,相当于ripper_pos( VALUE self )
【讨论】:
是的,它使用旧式的函数定义,其中参数(无类型)列在括号中,然后在函数的左大括号之前声明这些变量及其类型身体。所以self 的类型是VALUE。
【讨论】:
这是旧 c.在 ANSI C 强制类型化参数之前,K&R C 使用了这个约定。
static VALUE // A static function that returns 'VALUE' type.
ripper_pos(self) // Function 'ripper_pos' takes a parameter named 'self'.
VALUE self; // The 'self' parameter is of type 'VALUE'.
【讨论】:
这确实是旧的 C 代码,您首先指定参数名称,然后指定它们的类型。参见例如here。
【讨论】: