C中这个奇怪的函数定义语法是什么?

时间:2010-06-10 16:10:06

标签: c function definition

我最近在玩GNU Bison时看到了一些像这样的函数定义:

static VALUE
ripper_pos(self)
    VALUE self;
{
    //code here
}

为什么括号外的self类型?这是有效的C?

6 个答案:

答案 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