Что это за синтаксис определения странных функций в C?
Я видел несколько определений функций, подобных этому в последнее время, играя с GNU Bison:
static VALUE
ripper_pos(self)
VALUE self;
{
//code here
}
Почему тип self вне скобки? Действительно ли это C?
Ответ 1
Это старые объявления параметров функции стиля 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;
}
Объявления "нового стиля" в основном универсальны.
Ответ 2
Это так называемый "старый" вариант объявления аргументов функции. В древние времена вы не могли просто писать типы аргументов внутри круглых скобок, но вам приходилось определять их для каждого аргумента сразу после закрывающей скобки.
Другими словами, это эквивалентно ripper_pos( VALUE self )
Ответ 3
Да, он использует более старый стиль определения функции, в котором параметры, sans type, перечислены в скобках, а затем объявление этих переменных с их типами перед открывающей скобкой тела функции. Итак, self имеет тип VALUE.
Ответ 4
Это старый 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'.