Like Share Discussion Bookmark Smile

J.J. Huang   2019-10-28   C C 語言技術 <201910>   瀏覽次數:次   DMCA.com Protection Status

C語言 - 第二十四章 | 函式入門 - 函式簡介

前置作業

因為會寫另外寫*.h標頭檔,所以新增項目,選擇「標頭檔 (.h)」,命名為math.h

什麼是函式(Function)?

到目前為止都只使用一個函式(Function),也就是main()主函式,將所有的程式寫在主函式中只適合一些小程式,如果程式比較大,會發現有某些程式碼經常使用,而由於撰寫在同一個主函式中的關係,這些程式碼會一再重覆地撰寫,對於程式中出現兩次以上被重覆使用的程式片段,可以將之定義為函式以便重覆呼叫。

函式用來將程式組織為一個小的、獨立的運行單元,一個函式可以接受資料,並運行其中的算法,最後將結果傳回。

C中函式的組成主要包括四個部份:傳回值、函式名稱、參數列與函式主體。前三者被稱為函式宣告或函式原型(Function prototype),函式原型描述的是函式的介面,通常宣告在一個獨立的標頭檔中,而被含括在每一個想要呼叫函式的檔案中,以下是一個函式宣告的範例,撰寫在檔案math.h中。

1
2
int power_two(int);
int power(int, int);

C中如果呼叫函式不傳回任何值,則宣告為void,若不傳入任何引數,則參數列保持空白即可,也可以使用void來加以註明,表頭檔案被儲存為.h檔案,接著可以根據函式原型來實作函式主體,例如,在math.c中撰寫。

1
2
3
4
5
6
7
8
9
10
11
12
int power_two(int num) {
return power(num, 2);
}

int power(int n, int p) {
int r = 1;
for(int i = 0; i < p; i++) {
r *= n;
}

return r;
}

在含括標頭檔案時,如果標頭檔案與含入標頭檔的文件在同一個目錄下,那麼就使用雙引號""來包括標頭檔案名稱,如果是標準或專案專屬的標頭檔,例如C的標準表頭檔,那麼則使用角括號<>來括住,編譯器在尋找時就會從設定的目錄中開始尋找。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include "math.h"

int main() {

int num = 0;
int pow = 0;

printf("輸入數值:");
scanf("%d", &num);

printf("輸入平方:");
scanf("%d", &pow);

printf("%d 平方:%d\n", num, power_two(num));
printf("%d 的 %d 次方 %d\n", num, pow, power(num, pow));

return 0;
}

在編譯時期,編譯器會對被呼叫函式作檢查,如果無法根據函式名稱、提供的引數型態與函式宣告上參數型態來決定被呼叫的函式,則會出現編譯錯誤,這就是必須 先作函式宣告的原因,這對編譯器的檢查工作是必要的資料。


註:以上參考了
函式簡介