共找到2條詞條名為函數聲明的結果 展開
- 函數聲明
- 函數原型
函數聲明
函數聲明
“函數定義”是指對函數功能的確立,包括指定函數名,函數值類型、形參類型、函數體等,它是一個完整的、獨立的函數單位。而“函數聲明”的作用則是把函數的名字、函數類型以及形參類型、個數和順序通知編譯系統,以便在調用該函數時系統按此進行對照檢查(例如函數名是否正確,實參與形參的類型和個數是否一致)。
在書寫形式上,函數聲明可以把函數頭部複製過來,在後面加一個分號;而且在參數表中可以只寫各個參數的類型名,而不必寫參數名。
【返回類型】函數名(參數1類型 參數1,參數2類型 參數2,……);
例子:
#include
int add(int x,int y); //函數聲明語句
main(){
int a,b,c;
c=add(a,b);
printf("%d",c);
}
int add(int x,int y)//函數定義
{ int z; z=x+y; return z; }
就像變數可以在頭文件中聲明,而在源文件中定義一樣,函數也可以在頭文件中聲明,在源文件中定義。
把函數聲明直接放在每個使用該函數的源文件中是大多數新手習慣並喜愛的方式,這是合法的。但是這種方式古板且易出錯。解決方法就是把函數的聲明放在頭文件中,這樣可以確保對於指定函數其所有聲明保持一致。如果函數介面發生變化,則只需修改其唯一聲明即可。
將提供函數聲明的頭文件包含在定義該函數的源文件中,可使編譯器能檢查該函數的定義和聲明是否一致。特別地,如果函數定義和函數聲明的形參列表一致,但返回類型不一致,編譯器會發出警告或出錯信息來指出差異。
函數的聲明與函數的定義形式上十分相似,但是二者有著本質上的不同。聲明是不開闢內存的,僅僅告訴編譯器,要聲明的部分存在,要預留一點空間。定義則需要開闢內存。
函數的定義是一個完整的函數單元:
1.包含函數類型、函數名、形參及形參類型、函數體等
2.在程序中,函數的定義只能有一次
3.函數首部與花括弧間不加分號
函數聲明只是對編譯系統的一個說明:
1.函數聲明是對定義的函數的返回值的類型說明,以通知系統在本函數中所調用的函數是什麼類型。
2.不包含函數體(或形參)
3.調用幾次該函數就應在各個主調函數中做相應聲明
4.函數聲明是一個說明語句,必須以分號結束!
1.函數聲明可以省略形參名,但是函數定義的首部必須寫出所有形參名並給出其對應的數據類型。
2.函數原型的主要目的為聲明函數返回值類型以及函數的期望接受的參數的個數、參數類型和參數順序
3.如果程序中沒有某個函數的函數原型(沒有說明),編譯系統就會用第一次出現的這個函數(函數定義或函數調用)構造函數原型
4.在預設下編譯系統默認函數返回值為int
5.而對函數參數類型不做任何假設
6.常見錯誤
7.和函數原型不匹配的函數調用會導致語法錯誤
8.函數原型和函數定義不一致,也會產生錯誤
9.C語言環境下,如果函數不進行聲明就使用,可能會發生錯誤,因為默認將返回值做為int類型來處理,所以,最好是在使用之前對函數進行聲明。