2010-06-10 44 views
33

我見過這樣幾個函數的定義,而最近與GNU野牛玩:C中這個奇怪的函數定義語法是什麼?

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

爲什麼self外的括號的類型?這個有效的C嗎?

+0

請參閱[此C語法有什麼用處?](http://stackoverflow.com/questions/1630631/what-is-useful-about-this-c-syntax)。 – 2010-06-10 16:16:06

回答

34

這些都是老K & [R風格函數參數聲明,聲明參數類型的分別:

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

這是一樣的更現代的方式來聲明函數參數:

「新風格」聲明基本上普遍受歡迎。

+7

如果您省略了任何參數的類型定義,則該參數將被假定爲int。另外,如果你省略了返回類型,它將被假定爲int。例如:func(a,b,c){return a + b + c; } – Ferruccio 2010-06-10 16:23:12

+3

只是FWIW,K&R風格仍然有時用於編碼高爾夫球...... – 2010-06-10 16:29:03

4

是,它使用了其中的參數,SANS類型,括號中列出函數定義的舊風格,其次是這些變量他們的函數體的開括號之前類型的聲明。所以self的類型是VALUE

9

這是聲明函數參數的所謂「舊」變體。在過去的日子裏,你不能只在圓括號內寫出參數類型,但是你必須在右括號之後爲每個參數定義它。

換句話說,就相當於ripper_pos(VALUE self)

2

這是一個非常古老的C代碼,您首先指定參數名稱,然後指定它們的類型。參見例如here

3

這是 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'. 
相關問題