コース一覧
    C言語基礎 関数・配列編
    void関数

    C言語基礎 関数・配列編

    C言語の関数と配列を学び、処理を分割してデータを扱うコースです。

    1
    関数
    01. 関数を定義する15分
    02. 引数と戻り値15分
    03. プロトタイプ宣言15分
    04. void関数15分
    05. 変数のスコープ15分
    06. つくる 関数に分割15分
    07. 第5章クイズ10分
    2
    配列と文字列
    01. 配列15分
    02. 配列とfor15分
    03. 集計15分
    04. 最高点と最低点15分
    05. 文字列(char配列)15分
    06. 文字列関数15分
    07. 文字列の入力15分
    08. つくる 配列で成績管理15分
    09. 第6章クイズ10分

    void関数

    返す値がない関数

    最初に書いた show_line を思い出してください。線を1本出すだけなのに、戻り値の型を int と書いたせいで、意味のない return 0; を付ける羽目になっていました。呼び出し側もその 0 を毎回捨てています。

    こういう「やることはやるが、返す値はない」関数のために、C には void という型が用意されています。

    c

    void show_line(void) {
        printf("------------------------------\n");
    }

    戻り値の型を void にすると、return を書く必要がなくなります。本体の最後まで実行したら、そのまま呼び出し元に戻ります。

    void は「空」という意味の型で、値がひとつも入らない型だと思ってください。引数リストの (void) も同じ単語ですが、こちらは「受け取る値がない」ことを表しています。同じ関数の1行目に2回出てくるので混乱しやすいのですが、左の void は返さない、カッコの中の void は受け取らない と場所で区別できます。

    値は返さないが引数は受け取れる

    引数と戻り値は別の話なので、値を受け取って表示だけする関数も書けます。

    c

    void show_result(int no, int score) {
        printf("%d人目 %d点 ", no, score);
        if (score >= 60) {
            printf("合格\n");
        } else {
            printf("不合格\n");
        }
    }

    受け取った点数から合否まで判定して、画面に出して終わりです。返す値はありません。main 側は次のように呼びます。

    c

    show_result(1, 80);

    void 関数でやってはいけないこと

    返す値がないので、呼び出しを値として使えません。

    c

    int x = show_line();   /* エラー。void は値を持たない */

    また、return 80; のように値を付けた return も書けません。ただし 値なしの return; は書けます。分岐で途中打ち切りをしたいときに使います。

    c

    void show_result(int no, int score) {
        if (score < 0) {
            printf("%d人目 データなし\n", no);
            return;
        }
        printf("%d人目 %d点\n", no, score);
    }

    return; に来たらそこで関数が終わるので、下の行は実行されません。

    使い分けの目安

    計算した結果を呼び出し元が使うなら戻り値のある関数、画面に出して終わりなら void 関数、という分け方が素直です。表示と計算を1つの関数に混ぜると、あとで「画面には出さずに値だけ欲しい」となったときに困ります。この章の最後のつくる回では、まさにこの分け方でプログラムを組み直します。

    では、区切り線と1人分の表示を、どちらも void 関数にしてみましょう。

    要件

    1. show_line は引数も戻り値もない void 関数にする。ハイフン30個の行を表示する
    2. show_result は番号と点数を受け取る void 関数にする。戻り値はない
    3. show_result は 1人目 80点 合格 の形で1行表示する。60点以上を合格、それ未満を不合格とする
    4. for 文で3人分の点数を scanf で読み込み、読むたびに show_result を呼ぶ
    5. 一覧の前後に show_line を1回ずつ呼ぶ

    ヒント

    void 関数の中に return を書く必要はありません

    番号は for のカウンタから作れます。1人目から数え始めることに注意してください

    点数と合否のあいだには半角スペースを1つ入れます

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • 変数のスコープ

      ローカル変数がどこまで見えるか説明できるようになります。

    • つくる 関数に分割

      計算と判定と表示をそれぞれ別の関数に分けられるようになります。

    • 第5章クイズ

      第5章の理解を確認します。

    • 配列

      同じ型の値をまとめて持てるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 関数処理に名前を付けて再利用できる単位
    • 戻り値呼び出し元への返答を表す点線矢印
    • 引数位置引数=順番で渡す。
    • リスト順序付きで複数の値を扱うデータ構造
    main.c
    エディタを読み込んでいます

    メモ

    void関数

    ⌘S で保存