我最近在玩GNU Bison时看到了一些像这样的函数定义:
static VALUE
ripper_pos(self)
VALUE self;
{
//code here
}
为什么括号外的self
类型?这是有效的C?
答案 0 :(得分:36)
这些是旧的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;
}
“新风格”声明基本上是普遍优先的。
答案 1 :(得分:9)
这是声明函数参数的所谓“旧”变体。在过去的日子里,你不能只在括号内写入参数类型,但你必须在右括号之后为每个参数定义它。
换句话说,它相当于ripper_pos( VALUE self )
答案 2 :(得分:4)
是的,它使用旧式的函数定义,其中参数sans类型列在括号中,然后在函数的左大括号之前声明那些变量 的类型身体。因此self
的类型为VALUE
。
答案 3 :(得分:3)
这是旧 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'.
答案 4 :(得分:2)
答案 5 :(得分:2)
它实际上是旧的C代码,您首先指定参数名称,然后指定它们的类型。请参阅示例here。