2012-01-27 129 views

回答

3

A 函數聲明可能會/可能會不包括函數參數。
雖然功能原型必須包括函數參數。

Wikipedia
考慮下面的函數原型:

int fac(int n); 

該原型規定,在這個程序中,有一個名爲fac函數,它接受一個整數參數n和返回一個整數。在程序的其他地方,如果希望使用此功能,則必須提供函數定義。

請務必注意,函數的聲明不需要包含原型。以下是一個無原型函數聲明,它只聲明函數名稱及其返回類型,但不指出定義所期望的參數類型。

int fac(); 
+0

但在我發佈的鏈接以及它明確表示的問題上。查看答案的最後一行。 – Bazooka 2012-01-27 15:22:26

+0

@Parminder:檢查更新的答案 – 2012-01-27 15:26:55

+0

感謝您的答案。我想我明白了。 – Bazooka 2012-01-27 15:32:32

3

原型是聲明,但聲明並不總是原型。如果你沒有指定參數,那麼這只是一個聲明而不是一個原型。這意味着編譯器不會拒絕對該函數的調用,抱怨它沒有被聲明,但將無法檢查傳遞的參數是否正確(如果您有原型)。

0

函數原型是一個函數聲明,用於指定參數的數量和類型。

T foo();    // non-prototype declaration 
T foo(int, char *); // prototype declaration 
T foo(int a, char *b); // prototype declaration 
0

原型告訴編譯器哎有看起來像這樣的功能,這是它的名字int getanint()。當你使用這個函數時,編譯器把這個函數的代碼調用放在一個地方,把地址插入定義該函數的代碼中。

所以在文件標題A;

int getanint(); 

main.c中

int main(...) 
{ 
    getanint(); 
} 
編譯時的main.c

它不知道什麼getanint做,甚至在那裏的.o文件將創建不完整,不足以創建實際上編程。請記住,編譯器在單個文件上運行,該文件由於#include指令而可能非常大,但它們會創建單個文件。

當你complie A.cpp

int getanint() 
{ 
    return 4; 
} 

你現在有一個目標文件getanint代碼。

要實際製作程序,您必須獲取main.o和A.一起並將功能的定義插入適當的位置。這是鏈接器的工作。