C語言函式宣告以及函式原型

2021-10-03 04:37:11 字數 2167 閱讀 9604

c語言**由上到下依次執行,原則上函式定義要出現在函式呼叫之前,否則就會報錯。但在實際開發中,經常會在函式定義之前使用它們,這個時候就需要提前宣告。

函式宣告(declaration),就是告訴編譯器我要使用這個函式,你現在沒有找到它的定義不要緊,請不要報錯,稍後我會把定義補上。

函式宣告的格式非常簡單,相當於去掉函式定義中的函式體,並在最後加上分號;,如下所示:

datatype  functionname

( datatype1 param1, datatype2 param2 ...

);

也可以不寫形參,只寫資料型別:

datatype  functionname

( datatype1, datatype2 ...

);

函式宣告給出了函式名、返回值型別、引數列表(重點是引數型別)等與該函式有關的資訊,稱為函式原型(function prototype)。函式原型的作用是告訴編譯器與該函式有關的資訊,讓編譯器知道函式的存在,以及存在的形式,即使函式暫時沒有定義,編譯器也知道如何使用它。

有了函式宣告,函式定義就可以出現在任何地方了,甚至是其他檔案、靜態鏈結庫、動態鏈結庫等。

例項1 定義乙個函式 sum(),計算從 m 加到 n 的和,並將 sum() 的定義放到 main() 後面。

#include 

//函式宣告

intsum

(int m,

int n)

;//也可以寫作int sum(int, int);

intmain()

//函式定義

intsum

(int m,

int n)

return sum;

}

在 main() 函式中呼叫了 sum() 函式,編譯器在它前面雖然沒有發現函式定義,但是發現了函式宣告,這樣編譯器就知道函式怎麼使用了,至於函式體到底是什麼,暫時可以不用操心,後續再把函式體補上就行。

例項2 定義兩個函式,計算1! + 2! + 3! + … + (n-1)! + n!的和。

#include 

// 函式宣告部分

long

factorial

(int n)

;//也可以寫作 long factorial(int);

long

sum(

long n)

;//也可以寫作 long sum(long);

intmain()

//函式定義部分

//求階乘

long

factorial

(int n)

return result;

}// 求累加的和

long

sum(

long n)

return result;

}

執行結果:

1!+

2!+.

..+9!+

10!=4037913

對於單個原始檔的程式,通常是將函式定義放到 main() 的後面,將函式宣告放到 main() 的前面,這樣就使得**結構清晰明了,主次分明。

將函式定義放在最後,就是盡量遮蔽不重要的資訊,凸顯關鍵的資訊。將函式宣告放到 main() 的前面,在定義函式時也不用關注它們的呼叫順序了,哪個函式先定義,哪個函式後定義,都無所謂了。

對於多個檔案的程式,通常是將函式定義放到原始檔(.c檔案)中,將函式的宣告放到標頭檔案(.**件)中,使用函式時引入對應的標頭檔案就可以,編譯器會在鏈結階段找到函式體。

在使用 printf()、puts()、scanf() 等函式時引入了 stdio.h 標頭檔案,我們認為 stdio.h 中包含了函式定義(也就是函式體),只要有了標頭檔案就能執行,其實不然,標頭檔案中包含的都是函式宣告,而不是函式定義,函式定義都放在了其它的原始檔中,這些原始檔已經提前編譯好了,並以動態鏈結庫或者靜態鏈結庫的形式存在,只有標頭檔案沒有系統庫的話,在鏈結階段就會報錯,程式根本不能執行。

除了函式,變數也有定義和宣告之分。實際開發過程中,變數定義需要放在原始檔(.c檔案)中,變數宣告需要放在標頭檔案(.**件)中,在鏈結程式時會將它們對應起來。

函式原型 函式宣告

對func函式的定義 char func int x,int y 對func函式的呼叫 char s s func 10,50 對func函式的原型說明 char func int x,int y 後面有分號,並且沒有函式體 函式宣告由函式返回型別 函式名和形參列表組成。形參列表必須包括形參型別,但...

函式宣告 函式定義 函式原型

函式宣告 函式定義 函式原型 1.void threeline void 宣告了乙個函式的名字 引數型別和個數 返回值型別,這叫做函式原型 2.在 中可以單獨寫乙個函式原型,後面加 結束,沒有函式體,如void threeline void 這就只能叫函式宣告而不能叫函式定義,只有帶函式宣告的才叫定...

C語言函式原型

在主調函式中呼叫某函式之前應對該被調函式進行說明 宣告 這與使用變數之前要先進行變數說明是一樣的。在主調函式中對被調函式作說明的目的是使編譯系統知道被調函式返回值的型別,以便在主調函式中按此種型別對返回值作相應的處理。其一般形式為 型別說明符 被調函式名 型別 形參,型別 形參 或為 型別說明符 被...