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関数は引数を受け取って合計を計算し、その結果を返すだけという役割分担になっています。このように責務を分離することで、コードの再利用性や可読性が大きく向上します。
まとめ
| カテゴリ | 引数 | 戻り値 | 主な用途 |
|---|---|---|---|
| 引数なし・戻り値なし | × | × | 独立した単純な処理 |
| 引数なし・戻り値あり | × | ○ | 内部で取得した結果を返す処理 |
| 引数あり・戻り値なし | ○ | × | 受け取ったデータを元に表示などを行う処理 |
| 引数あり・戻り値あり | ○ | ○ | 計算など、結果を返す汎用的な処理 |
用途に応じて適切な関数の形式を選ぶことで、プログラム全体の設計品質を高めることができます。特に「引数あり・戻り値あり」の形式は、処理と入出力を分離できるため、実践的な開発では最もよく使われます。
-
C言語の探索アルゴリズム解説|線形探索と二分探索の違いと実装例
探索(サーチ)とは、複数の要素で構成されるリストの中から、目的の「キー」となる要素を見つけ出す処理のことです。 リストの中に指定した要素が存在すれば、その探索は「成功」とみなされます。 指定した要素がリストに存在しなければ、その探索は「失敗(不成功)」となります。 C言語で広く使われている代表的な探索手法は、主に次の2つです。 線形探索(Linear Search/リニアサーチ) 二分探索(Binary Search/バイナリサーチ) 線形探索(Linear Search)とは 線形探索は、リストの先頭から順に要素を1つずつ取り出し、キーと一致するかどうかを確認していく、最も基本的な探
-
C#におけるメソッドオーバーロードのさまざまな方法とは?
C#のメソッドオーバーロードとはC#では、同じ名前を持つ複数のメソッドを定義することを「メソッドオーバーロード」と呼びます。オーバーロードを実現するには、以下の2つの方法があります。・パラメータのデータ型が異なる場合 ・パラメータの数が異なる場合戻り値の型だけが異なる場合はオーバーロードとして認識されないため、必ずパラメータに違いが必要です。それでは、それぞれの方法について具体例を見ていきましょう。1. パラメータのデータ型が異なる場合同じ「print」というメソッド名でも、引数のデータ型がint、double、stringと異なることで、それぞれ別のメソッドとして定義できます。コンパイラは呼