C中这个奇怪的函数定义语法是什么?
我在使用GNU Bison时最近看到了一些这样的函数定义:
static VALUE ripper_pos(self) VALUE self; { //code here }
为什么是括号外的self
types? 这是有效的C?
那些是旧的K&R风格函数参数声明,分别声明参数的types:
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; }
“新风格”的声明基本上是普遍的。
这是声明函数参数的所谓“旧”变体。 在过去的日子里,你不能只在圆括号内写出参数types,但是你必须在右括号之后的每个参数中定义它。
换句话说,它相当于ripper_pos( VALUE self )
是的,它使用了一种老式的函数定义,其中参数sanstypes在括号中列出,然后在函数体的左括号之前声明这些variables的types。 所以self
是VALUE
types的。
这是老 c。 K&R C在ANSI C强制input参数之前使用了这个约定。
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'.
这是旧式的C函数声明语法 。
这是非常古老的C代码,您首先指定参数名称,然后指定它们的types。 在这里举个例子。