如果類似C代碼中的主函數聲明後面的兩行出現的含義是什麼意思?函數聲明後的內容是什麼,但函數外部本身如何
int main(argc,argv)
int argc;
char *argv[];
{
// main function body
}
我從來沒有見過這樣的事情。代碼工作得很好,但我很想知道這意味着什麼。謝謝!
如果類似C代碼中的主函數聲明後面的兩行出現的含義是什麼意思?函數聲明後的內容是什麼,但函數外部本身如何
int main(argc,argv)
int argc;
char *argv[];
{
// main function body
}
我從來沒有見過這樣的事情。代碼工作得很好,但我很想知道這意味着什麼。謝謝!
這是在K & R C中聲明參數參數的原始(古代)風格。在ANSI C標準中,您可能熟悉的形式已成爲標準。
這只是另一種聲明特定函數參數數據類型的方法。
不,它實際上不是「只是另一種聲明參數數據類型的方法」 。這是一種定義函數接收的參數的方法 - 但只有在這些參數已經經歷了默認參數提升之後。 –
是的。你是對的!所以我可以說 - 當我們不確定接收參數的數據類型時,使用默認參數提升。 –
雖然它是另一種聲明函數參數的方法,但它與新的/ ANSI/ISO C聲明和定義完全不兼容。我只是想明確指出,所以沒人會認爲他們可以做一些事情,比如將新式函數聲明/原型與舊的K&R風格函數定義混合使用。 –
這是"K&R" C。這是過時的方式。
即使您的編譯器支持它,也不要使用它。傳遞給以這種方式定義的函數的參數將經歷參數提升,以便每個參數具有相同的大小(通過與最新C代碼中提升的可變參數相同的機制)。
這樣的代碼也不支持函數聲明/原型。不要試圖通過創建函數原型來「改善」這些代碼 - 你會打破函數期望的參數提升。
已過時[K&R語法](http://stackoverflow.com/questions/3092006/function-declaration-kr-vs-ansi) – Diego