C语言中这种奇怪的函数定义语法是什么?
最近在玩GNU Bison时,我看到了一些类似的函数定义:C语言中这种奇怪的函数定义语法是什么?,c,function,definition,C,Function,Definition,最近在玩GNU Bison时,我看到了一些类似的函数定义: static VALUE ripper_pos(self) VALUE self; { //code here } 为什么self的类型在括号外?这是有效的C吗?是的,它使用了一种较旧的函数定义样式,其中参数sans type列在括号中,然后在函数体的大括号前声明这些变量及其类型。因此,self属于VALUE类型,这是声明函数参数的所谓“旧”变体。在过去,不能只在括号内写参数类型,但必须在右括号后为每个参数定义参数类型
static VALUE
ripper_pos(self)
VALUE self;
{
//code here
}
为什么
self
的类型在括号外?这是有效的C吗?是的,它使用了一种较旧的函数定义样式,其中参数sans type列在括号中,然后在函数体的大括号前声明这些变量及其类型。因此,self
属于VALUE
类型,这是声明函数参数的所谓“旧”变体。在过去,不能只在括号内写参数类型,但必须在右括号后为每个参数定义参数类型
换句话说,它相当于裂土器位置(自身值),这是最重要的 这是一段非常古老的C代码,首先指定参数名,然后指定它们的类型。请参见示例。这些是旧的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;
}
“新样式”声明基本上是普遍首选的。在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'.
请参阅。如果您省略了任何参数的类型定义,则该参数将假定为int。此外,如果您省略了返回类型,则将假定为int。例如:func(a,b,c){return a+b+c;}Just FWIW,K&R style有时仍用于代码golf。。。