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

Tom*_*ing 34 c function definition

我最近在玩GNU Bison的时候看过这样的一些函数定义:

static VALUE
ripper_pos(self)
    VALUE self;
{
    //code here
}
Run Code Online (Sandbox Code Playgroud)

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

sth*_*sth 36

这些是旧的K&R样式函数参数声明,分别声明参数的类型:

int func(a, b, c)
   int a;
   int b;
   int c;
{
  return a + b + c;
}
Run Code Online (Sandbox Code Playgroud)

这与声明函数参数的更现代的方法相同:

int func(int a, int b, int c)
{
  return a + b + c;
}
Run Code Online (Sandbox Code Playgroud)

"新风格"声明基本上是普遍优先考虑的.

  • 如果省略了任何参数的类型定义,则该参数将被假定为int.此外,如果省略了返回类型,则假定它是int.例如:func(a,b,c){return a + b + c; } (7认同)
  • 只是FWIW,K&R风格有时仍然用于代码高尔夫...... (3认同)

Fyo*_*kin 9

这是声明函数参数的所谓"旧"变体.在过去的日子里,你不能只在括号内写入参数类型,但你必须在右括号后面为每个参数定义它.

换句话说,它相当于 ripper_pos( VALUE self )