HOME ABOUT CONTACT

C/C++教學: 第十三課 - 函式

Rain August 11, 2024
Outline

1. 函式

2. 簡單的函式範例

3. 函式注意事項

4. 函式回傳值的資料型態

函式top

介紹完迴圈架構之後,我想是時候可以先介紹一下函式(Function),函式可以說是程式語言中重要的角色之一,好的工程師就要能設計好的函式,並且活用設計原理。

那麼什麼是函式呢? 它又有甚麼用途呢? 首先,函式可以讓我們將一段程式碼用一個名稱把它包裝起來,當我們需要的時候,可以隨時隨地去使用這個函式去執行它,這樣便可以大大地減少重複的程式碼,讓整體程式碼可以看起來更簡便、更容易理解。而這個包裝名稱也就是函式名稱,在業內可能會稱之為API或直接叫Function。

那麼要如何包裝一段程式碼呢? 我們先來看看下面的基本架構:


{return data type} {function name} ( arguments )
{
    // do something ...
}
                    

簡單的函式範例top

函式定義的開頭return data type,是指這段被包裝的程式碼最後會回傳什麼樣的資料類型,例如它是一段數字計算的程式碼,最後會回傳計算完成之後的整數,那麼就可以定義為 int。

而 function name 函式名稱就看設計者如何命名,但有個限制是不能以數字作為開頭
再來最後就是 arguments 參數,表示這段被包裝的程式碼需要引用了哪些變數來做計算處理。 我們可以來看看一個簡單的範例,假設有一個函式是負責將兩個變數相加,那麼可能會是如下:


int add (int a, int b) {
    int c = a + b;
    return c;
}
                        

int add (int a, int b) {
    return a + b;
}
                        

考慮上面的兩個例子,我們定義了一個函式叫做add,且也定義了它會回傳 int 的資料型態,並且需要兩個 int a 和 b 參數來做計算,最後用 return (回傳)關鍵字將最後計算結果丟回給呼叫處。

兩個例子的差異只在於有使用區域變數 int c 與否,其餘都是相同的。看看實際調用函式是如何撰寫的,如下:


int add (int a, int b) {
    return a + b;
}

int main () {
    int a = 1, b = 2;
    int c = add(a, b);
    cout << "c = " << c << endl;
}
                        

我們在主程式區塊內宣告了兩個變數分別是 a 和 b ,並且都賦予它們的初始值,然後調用了 add 函式,並且將結果用 int c 去接收回傳值。

這樣就完成了一個很基本的函式調用,而像上述的例子,事實上我們也可以不用先宣告變數a和b,而是直接丟數字給函式 add 也是可以的,如下:


int add (int a, int b) {
    return a + b;
}

int main () {
    int c = add(1, 2);
    cout << "c = " << c << endl;
}
                        

如果確定了變數 a 和 b 在接下來是不會用到的變數,那麼就可以寫成像上面的例子。以上面的例子的目的來說,我們只要輸出打印 add 的結果的話, 甚至還可以寫成如下更精簡的樣子:


int add (int a, int b) {
    return a + b;
}

int main () {
    cout << "c = " << add(1, 2) << endl;
}
                        

像上面的範例就是只有函式定義,而沒有函式的實現(或稱實作)。這樣的用途在於程式由上到下執行時,可以先知道程式碼內文有哪些函式可以調用, 如上面的例子,若我們將 add 函式定義和實作擺在比被調用函式的地方還下面時,在編譯時就會出現錯誤。

函式注意事項top

函式有幾個要特別注意的幾件事情,如下:

函式回傳值的資料型態top

函式回傳值的資料型態,在上面的例子中,讀者應該可以聯想到在初學C/C++ 第四課 - 資料型態介紹到的變數型態。 沒錯,確實函式回傳值除了可以有變數的資料型態之外,還有一些稍微較特別的種類,後續教學會再提到,統整如下表:

回傳值型態 說明
int 回傳整數
char 回傳字元
string 回傳字串
float 回傳單精確度浮點數
double 回傳雙精確度浮點數
bool 回傳布林值
void 不回傳任何值
class or struct 回傳類別或結構
pointer 回傳任意資料類型的指標

下一篇: 第十四課 - 指標

Last updated:

Related Artical List

  1. C/C++教學: 第十一課 - while迴圈
  2. C/C++教學: 第十二課 - do while迴圈
  3. C/C++教學: 第十四課 - 指標(Pointer)

Article List