2012-11-15 140 views
0

我一直在學習C++一段時間,唯一不能包裝頭部的是函數原型和函數調用和函數定義的東西。我讀過各種各樣的東西,仍然不知道它的意思或做什麼。我只是想能夠理解和識別每一個。我很確定這些對於編程來說很重要,因爲我已經閱讀過了。我對函數原型有一個大概的概念,我相信它是一個聲明,可以返回某些東西的價值。函數原型混淆

回答

0

讓我看看,如果我可以用一些類比

函數原型解釋 - 它就像一個廣告的產品 - 它說,有一個產品X的,你可以從位置Y.這是得到它對於你來說,作爲消費者已經足夠了,但並沒有透露有關幕後的情況,讓X對Y和你有所幫助。

同樣的,函數原型是一個聲明,只是說有一個函數somewhr被命名爲X,需要參數Y並返回值Z.足夠的任何調用者,但不能自己做任何事情。
e.g int DoSomething(int arg);

函數調用 - 這是消費者不斷在位置Y.

這是當函數的代碼實際上是打電話問了產品X。但爲了能夠調用該函數,您需要知道該函數是否存在,因此您需要(至少)該函數的原型才能在該調用之上。
e.g int a = DoSomething(1);

功能定義 - 這是製造產品X並將其輸送到位置Y.

本質上講,這是函數本身的代碼中的實際過程。
例如
int DoSomething(int arg){
return arg+2;
}

函數原型(也稱爲前向聲明)需要在C和免費函數C(其中不屬於一類函數)++

1

函數原型是獨特至C - 不用於C++。 AC函數的原型主要是相當於一個C++函數聲明,如:

int f(int); 
int g(double); 

它們不同的地方是,如果你不把任何東西在括號:

int f(); 

在C++中,該聲明f是一個具有參數的函數。在C中,它聲明f作爲函數而沒有指定任何關於參數。爲了得到一個C的原型,這相當於C的聲明,你需要把東西括號之間:

int f(void); 

後者也允許在C++中,但 C++程序員傾向於避免它。

函數定義就是你有頭身體功能:

int f(int x) { 
    return x+4; 
} 

函數調用是你使用你定義一個函數:

int y = 2; 

int x = f(y); // using the f() above, this is equivalent to int x = 6; 

回到過去的日子裏1985年左右)C根本沒有函數原型,所以這是唯一支持的函數聲明。它通常在新代碼中被忽視。

+0

+1 no args版本對我來說是新的.. –