Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語の関数の分類とは?引数と戻り値による4つのカテゴリを解説

C言語における関数は、引数(ひきすう)の有無戻り値(返り値)の有無という2つの観点から、以下の4つのカテゴリに分類できます。

  • 引数なし・戻り値なしの関数
  • 引数なし・戻り値ありの関数
  • 引数あり・戻り値なしの関数
  • 引数あり・戻り値ありの関数

それぞれのカテゴリについて、サンプルコードと実行結果を交えながら詳しく見ていきましょう。

1. 引数なし・戻り値なしの関数

このタイプの関数は、呼び出し元からデータを受け取らず、計算結果も返しません。関数内で入力・処理・表示をすべて完結させるため、単純な処理に向いています。

サンプルコード

#include<stdio.h>
main() {
    void sum();
    clrscr();
    sum();
    getch();
}
void sum() {
    int a, b, c;
    printf("enter 2 numbers:\n");
    scanf("%d%d", &a, &b);
    c = a + b;
    printf("sum = %d", c);
}

実行結果

Enter 2 numbers:
3
5
Sum=8

main関数はsum関数を呼び出すだけで、データの受け渡しは一切行いません。入力から合計の表示まで、すべてsum関数内部で処理されています。

2. 引数なし・戻り値ありの関数

このタイプの関数は、引数は受け取りませんが、処理結果をreturn文によって呼び出し元へ返します。関数自身が必要なデータを内部で取得し、その結果だけを外部に渡す構造です。

サンプルコード

#include<stdio.h>
main() {
    int sum();
    int c;
    c = sum();
    printf("sum = %d", c);
    getch();
}
int sum() {
    int a, b, c;
    printf("enter 2 numbers");
    scanf("%d%d", &a, &b);
    c = a + b;
    return c;
}

実行結果

Enter two numbers 10 20
30

sum関数が計算した合計値をreturnで返し、main関数側の変数cがその値を受け取って表示しています。

3. 引数あり・戻り値なしの関数

このタイプの関数は、呼び出し元から引数としてデータを受け取りますが、戻り値は返しません。受け取ったデータを使った処理結果は、関数内で直接画面に出力するなどの形で扱います。

サンプルコード

#include<stdio.h>
main() {
    void sum(int, int);
    int a, b;
    printf("enter 2 numbers");
    scanf("%d%d", &a, &b);
    sum(a, b);
    getch();
}
void sum(int a, int b) {
    int c;
    c = a + b;
    printf("sum=%d", c);
}

実行結果

Enter two numbers 10 20
Sum=30

main関数で入力した2つの値が引数としてsum関数に渡され、sum関数内で合計が計算・表示されます。

4. 引数あり・戻り値ありの関数

このタイプの関数は、引数でデータを受け取り、処理結果を戻り値として返します。データの入力と出力を呼び出し元が担当し、関数は純粋な「計算処理」に専念できるため、最も汎用性が高い形式です。

サンプルコード

#include<stdio.h>
main() {
    int sum(int, int);
    int a, b, c;
    printf("enter 2 numbers");
    scanf("%d%d", &a, &b);
    c = sum(a, b);
    printf("sum=%d", c);
    getch();
}
int sum(int a, int b) {
    int c;
    c = a + b;
    return c;
}

実行結果

Enter two numbers 10 20
Sum=30

main関数が入力と表示を担当し、sum関数は引数を受け取って合計を計算し、その結果を返すだけという役割分担になっています。このように責務を分離することで、コードの再利用性や可読性が大きく向上します。

まとめ

カテゴリ引数戻り値主な用途
引数なし・戻り値なし× ×独立した単純な処理
引数なし・戻り値あり×内部で取得した結果を返す処理
引数あり・戻り値なし×受け取ったデータを元に表示などを行う処理
引数あり・戻り値あり計算など、結果を返す汎用的な処理

用途に応じて適切な関数の形式を選ぶことで、プログラム全体の設計品質を高めることができます。特に「引数あり・戻り値あり」の形式は、処理と入出力を分離できるため、実践的な開発では最もよく使われます。

  1. C言語の探索アルゴリズム解説|線形探索と二分探索の違いと実装例

    探索(サーチ)とは、複数の要素で構成されるリストの中から、目的の「キー」となる要素を見つけ出す処理のことです。 リストの中に指定した要素が存在すれば、その探索は「成功」とみなされます。 指定した要素がリストに存在しなければ、その探索は「失敗(不成功)」となります。 C言語で広く使われている代表的な探索手法は、主に次の2つです。 線形探索(Linear Search/リニアサーチ) 二分探索(Binary Search/バイナリサーチ) 線形探索(Linear Search)とは 線形探索は、リストの先頭から順に要素を1つずつ取り出し、キーと一致するかどうかを確認していく、最も基本的な探

  2. C#におけるメソッドオーバーロードのさまざまな方法とは?

    C#のメソッドオーバーロードとはC#では、同じ名前を持つ複数のメソッドを定義することを「メソッドオーバーロード」と呼びます。オーバーロードを実現するには、以下の2つの方法があります。・パラメータのデータ型が異なる場合 ・パラメータの数が異なる場合戻り値の型だけが異なる場合はオーバーロードとして認識されないため、必ずパラメータに違いが必要です。それでは、それぞれの方法について具体例を見ていきましょう。1. パラメータのデータ型が異なる場合同じ「print」というメソッド名でも、引数のデータ型がint、double、stringと異なることで、それぞれ別のメソッドとして定義できます。コンパイラは呼