2010-06-10 141 views
33

我见过这样几个函数的定义,而最近与GNU野牛玩:C中这个奇怪的函数定义语法是什么?

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

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

+0

请参阅[此C语法有什么用处?](http://stackoverflow.com/questions/1630631/what-is-useful-about-this-c-syntax)。 – 2010-06-10 16:16:06

回答

34

这些都是老K & [R风格函数参数声明,声明参数类型的分别:

int func(a, b, c) 
    int a; 
    int b; 
    int c; 
{ 
    return a + b + c; 
} 

这是一样的更现代的方式来声明函数参数:

“新风格”声明基本上普遍受欢迎。

+7

如果您省略了任何参数的类型定义,则该参数将被假定为int。另外,如果你省略了返回类型,它将被假定为int。例如:func(a,b,c){return a + b + c; } – Ferruccio 2010-06-10 16:23:12

+3

只是FWIW,K&R风格仍然有时用于编码高尔夫球...... – 2010-06-10 16:29:03

4

是,它使用了其中的参数,SANS类型,括号中列出函数定义的旧风格,其次是这些变量他们的函数体的开括号之前类型的声明。所以self的类型是VALUE

9

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

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

2

这是一个非常古老的C代码,您首先指定参数名称,然后指定它们的类型。参见例如here

3

这是 c。 K & R C在ANSI 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'.