2013-07-11 40 views
0

我是通過GNU C library - Date-time - Data & Functions 讀,碰到這個函數的定義來了:無型傳遞函數的參數,然後聲明指針變量有相同的名字

int timeval_subtract (result, x, y) 
struct timeval *result, *x, *y; 
{ 
    //do stuff 
    return result; 
} 

我從來沒有過這個參數傳遞之前。 - 括號內沒有變量的類型()。 -OK類型「結構timeval」來得晚,但使用相同的變量名?

就是上面完全等同於

int struct_timeval(struct timeval *result, struct timeval *x, struct timeval *y){ 

    //do stuff 
} 

與否?

+1

這是一種被稱爲K&R風格的舊式風格。這類問題在SO上有很多重複,請參考Google。 –

回答

1

它是舊式的函數聲明。它在聲明中使用一個標識符列表。

這種聲明不等同於函數原型。通過原型,函數參數被轉換爲參數類型,就像通過賦值一樣,但沒有原型默認參數提升發生。

+0

我不知道我明白了。 「論證推廣」? – nass

+0

@nass在一般情況下,它意味着窄於'int'類型的參數(如'char','short',...)被轉換爲int,而float被轉換爲double。 – ouah