2015-06-07 62 views
0

如果類似C代碼中的主函數聲明後面的兩行出現的含義是什麼意思?函數聲明後的內容是什麼,但函數外部本身如何

int main(argc,argv) 
    int argc; 
    char *argv[]; 
{ 
    // main function body 
} 

我從來沒有見過這樣的事情。代碼工作得很好,但我很想知道這意味着什麼。謝謝!

+1

已過時[K&R語法](http://stackoverflow.com/questions/3092006/function-declaration-kr-vs-ansi) – Diego

回答

1

這只是另一種聲明特定函數參數數據類型的方法。

+0

不,它實際上不是「只是另一種聲明參數數據類型的方法」 。這是一種定義函數接收的參數的方法 - 但只有在這些參數已經經歷了默認參數提升之後。 –

+0

是的。你是對的!所以我可以說 - 當我們不確定接收參數的數據類型時,使用默認參數提升。 –

+0

雖然它是另一種聲明函數參數的方法,但它與新的/ ANSI/ISO C聲明和定義完全不兼容。我只是想明確指出,所以沒人會認爲他們可以做一些事情,比如將新式函數聲明/原型與舊的K&R風格函數定義混合使用。 –

1

這是"K&R" C。這是過時的方式。

即使您的編譯器支持它,也不要使用它。傳遞給以這種方式定義的函數的參數將經歷參數提升,以便每個參數具有相同的大小(通過與最新C代碼中提升的可變參數相同的機制)。

這樣的代碼也不支持函數聲明/原型。不要試圖通過創建函數原型來「改善」這些代碼 - 你會打破函數期望的參數提升。

相關問題