【6日でできるC言語入門】様々な関数

 C言語の基礎で「関数」を学びましたが、実際のプログラミングでは多様な種類の関数を使い分けることが重要です。関数には、「引数や戻り値があるもの」「引数も戻り値もないもの」など、さまざまなパターンがあります。また、関数を使うことで処理を分かりやすく整理でき、プログラムの再利用性も大きく向上します。
 ここでは、実用的な関数のバリエーションや、return文の使い方、関数スコープ(有効範囲)について、例を通して解説します。

1.様々な関数の例

1.1. サンプルプログラムで学ぶ

まずは色々なタイプの関数を使ったプログラムを見てみましょう。

サンプルプログラム(3つの関数を使い分ける)

プロジェクト/ファイル名: Lesson39_1/main.c

#include <stdio.h>

// プロトタイプ宣言
int min_num(int, int);
void display(int);
void separator(void);

int main(void) {
    int n1 = 9, n2 = 3;
    separator();
    display(n1);
    display(n2);
    printf("2つのうち、小さい数は、%dです。\n", min_num(n1, n2));
    separator();
    return 0;
}

// 2つの整数のうち最小値を求める関数
int min_num(int a, int b) {
    if (a < b) {
        return a;
    }
    return b;
}

// 数値を表示する関数
void display(int n) {
    printf("与えられた数:%d\n", n);
    return;  // 戻り値なし。終了のみ
}

// 線を引く関数
void separator(void) {
    printf("----------\n");
}

実行結果

----------
与えられた数:9
与えられた数:3
2つのうち、小さい数は、3です。
----------

1.2. それぞれの関数の役割と書き方

関数名引数戻り値役割と特徴
min_numint, intint2つの整数のうち小さい方を返す。
displayintvoid引数で渡された数を表示
separatorvoidvoid区切り線を表示(引数も戻り値もなし)

2.戻り値・引数・スコープについて

2.1. return文の活用(途中で関数を抜ける場合)

min_num 関数では、途中でreturn a;で処理を終了し値を返します。
return関数の最後だけでなく、条件分岐の途中でも使えるのが特徴です。

int min_num(int a, int b) {
    if (a < b) {
        return a;  // aが小さい場合はここで終了
    }
    return b;      // そうでなければbを返す
}

2.2. 引数・戻り値がない関数

C言語では、引数も戻り値も持たない関数を作ることができます。
たとえば、separatorのように何も値を受け取らず、処理結果も返さない関数です。

void separator(void) {
    printf("----------\n");
    // return;  // 最後のreturnは省略可
}

ポイント

  • 戻り値がない場合は「void」
  • 引数がない場合も「void」を記述(省略も可)

3.変数のスコープ(有効範囲)について

3.1. スコープの基本

関数内で宣言した変数(ローカル変数)は、その関数の中でしか使えません。
これをスコープ(有効範囲)と呼びます。

void print_scope(void) {
    int local_var = 100;
    printf("関数内の変数:%d\n", local_var);
}

上記の local_var は他の関数からは参照不可。

まとめ

  • C言語の関数は、引数や戻り値の有無に応じて柔軟に作成可能です。
  • return文は、関数の途中でも使えるので、効率的な処理分岐ができます。
  • 引数・戻り値が不要な場合はvoidを使いましょう。
  • 関数ごとのスコープ(変数の有効範囲)を意識すると、バグを防ぎやすくなります。

関数の活用をマスターして、より分かりやすく・再利用性の高いC言語プログラムを書いていきましょう!