2014-02-12 111 views
0

說一個函數定義它被稱爲前:函數定義聲明函數嗎?

int test(int i) { 
    /* do something */ 
} 

是否定義一個函數聲明呢?

+1

是的,但您應該先聲明它。 –

+1

@Basile爲什麼呢? –

回答

2

函數定義包含函數聲明和函數的主體。正文是執行該函數工作的語句塊。在這個例子中聲明的標識符分配存儲;它們都是聲明和定義。

查看here瞭解更多信息。

3
int func(); 

這是一個函數聲明;它沒有提供函數的主體,但它告訴編譯器它可以使用這個函數,並期望它將被定義在某個地方。

int func() 
{ 
    return 2; 
} 

這是一個函數定義。 定義一些東西意味着提供所有必要的信息來創建完整的東西。定義一個函數意味着提供一個函數體;定義一個類意味着給予所有的類和領域的方法。 一旦定義了一些東西,那也算作是宣稱它;所以你可以同時聲明和定義一個函數,類或變量。但你不必這樣做。

因此,要回答你的問題:是

來自:http://www.cprogramming.com/declare_vs_define.html

1

直接從維基百科:

函數原型或函數接口在C,Perl中,PHP或C++是一種 聲明的一個函數忽略了函數體,但是 指定了函數的返回類型,名稱,參數和參數類型。 儘管函數定義指定了函數的功能,但函數原型可以被認爲是指定其接口。

此功能是可用的:

int test(int i) { 
    /* do something */ 
} 

int main() { 
    int k = test(5); 
    return 0; 
} 

然而,使用的事項的訂單時,一個功能被自動限定,而不是聲明。

此代碼不起作用,因爲當調用test()時,它不被聲明或定義。

int main() { 
    int k = test(5); 
    return 0 
} 

int test(int i) { 
    /* do something */ 
} 

通過前手宣告所有的功能,你不必擔心它們被定義或調用(只要所有調用的聲明之後發生)的順序。此外,這是一個很好的習慣,可以幫助您處理具有多個C和頭文件的大型代碼庫。下面的代碼因爲聲明而編譯:

int test(int);  

int main() { 
    int k = test(5); 
    return 0 
} 

int test(int i) { 
    /* do something */ 
}