2010-06-10 14 views
33

Widziałem kilka definicji funkcji, jak to niedawno podczas gry z GNU Bison:Co to jest ta dziwna składnia definicji funkcji w C?

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

Dlaczego jest typem self poza nawiasem? Czy to jest prawidłowe C?

+0

See [Co to jest przydatne o tej składni C?] (Http://stackoverflow.com/questions/1630631/what-is-useful-about-this-c-syntax). –

Odpowiedz

34

Są stare K zgłoszeń parametrowej funkcji styl & R, stwierdzające rodzaje parametrów, oddzielnie:

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

To samo jak bardziej nowoczesny sposób deklarowania parametrów funkcyjnych:

Deklaracje "nowego stylu" są ogólnie preferowane.

+7

Jeśli pominięto definicję typu dla dowolnego parametru, parametr ten zostanie przyjęty jako int. Ponadto, jeśli pominięto typ zwracany, przyjęto by, że jest to int. np. func (a, b, c) {return a + b + c; } – Ferruccio

+3

Po prostu FWIW, styl K & R jest czasami używany do gry w golfa ... –

4

Tak, używa starszego stylu definicji funkcji, w której parametry, typ sanu, są wymienione w nawiasach, po których następuje deklaracja zmiennych z ich typami przed nawiasem otwierającym korpusu funkcji. Tak więc self jest typu VALUE.

9

Jest to tak zwany "stary" wariant deklarowania argumentów funkcji. W dawnych czasach nie można było po prostu pisać typów argumentów w nawiasach, ale trzeba było zdefiniować je dla każdego argumentu zaraz po nawiasie zamykającym.

Innymi słowy, jest to równoznaczne z ripper_pos(VALUE self)

2

To naprawdę stary kod C, w którym najpierw określa się nazwy argumentów, a następnie ich typy. Zobacz na przykład: here.

3

To jest stary c. K & R C użył tej konwencji, zanim ANSI C wymusił wpisane parametry.

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'. 
Powiązane problemy