猿问

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

最近,在使用GNU Bison时,我已经看到一些类似的函数定义:


static VALUE

ripper_pos(self)

    VALUE self;

{

    //code here

}

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


慕田峪9158850
浏览 618回答 3
3回答

九州编程

这些是旧的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;}基本上,“新样式”声明是普遍首选的。

千万里不及你

这是声明函数参数的所谓“旧”变体。在过去,不能只在括号内编写参数类型,而必须在右括号后为每个参数定义参数类型。换句话说,它相当于 ripper_pos( VALUE self )

慕斯709654

这是老 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'.
随时随地看视频慕课网APP
我要回答