C言語のプログラミングにおいて、同じような処理を何度も書いていると、コードが長くなり、読みにくくなってしまいます。そんな問題を解決するのが**「自作関数」**です。
処理を一つのまとまりとして関数化することで、コードの再利用性が高まり、プログラム全体が整理されて見やすくなります。この記事では、C言語で自作関数を定義し、使うための基本的なルールを分かりやすく解説します。
自作関数の基本的な作り方と呼び出し方
関数は、特定のタスクを実行するための「小さなプログラム」のようなものです。まずは、その基本的な構成要素を見ていきましょう。
関数の定義
戻り値の型 関数名(引数の型 仮引数名1, 引数の型 仮引数名2, ...) {
// 関数の処理
...
return 戻り値; // 戻り値の型が void でなければ必須
}
- 戻り値の型 (Return Type): 関数が処理を終えた後に、呼び出し元に返す値のデータ型です。値を返さない場合は
voidと書きます。 - 関数名 (Function Name): 関数の役割がわかるような、自由な名前を付けます。
- 引数 (Parameters): 関数が処理を行うために、呼び出し元から受け取る値です。不要な場合は
(void)と書きます。 - return文: 関数の処理を終了し、呼び出し元に値を返します。
サンプルコード:簡単な足し算関数
2つの整数を受け取って、その合計を返す add_two_numbers という関数を作ってみましょう。
#include <stdio.h>
// 2つの整数を足し算する関数
int add_two_numbers(int num1, int num2) {
int sum = num1 + num2;
return sum; // 計算結果の sum を返す
}
int main(void) {
int result;
// add_two_numbers関数を呼び出し、戻り値を受け取る
result = add_two_numbers(10, 20);
printf("計算結果: %d\n", result); // 30 が表示される
result = add_two_numbers(5, 3);
printf("計算結果: %d\n", result); // 8 が表示される
return 0;
}
このように、一度関数を定義すれば、異なる値で何度も呼び出して使うことができます。
関数から別の自作関数を呼び出す
作成した関数の中から、さらに別の自作関数を呼び出すことも可能です。これにより、処理を細かく部品化し、プログラムを組み立てることができます。
#include <stdio.h>
// ユーザーからの入力を受け取る関数
int get_user_input(void) {
int value;
printf("整数を入力してください: ");
scanf("%d", &value);
return value;
}
// 2つの数値と、ユーザー入力を足し合わせる関数
int calculate_total(int num1, int num2) {
// 自作関数 get_user_input を呼び出す
int user_value = get_user_input();
int total = num1 + num2 + user_value;
return total;
}
int main(void) {
int result;
result = calculate_total(10, 20);
printf("最終的な合計値: %d\n", result);
return 0;
}
関数定義はmainの前?後?
C言語のコンパイラは、ソースコードを上から下に読み進めます。そのため、関数は呼び出される時点ですでにコンパイラに知られている必要があります。
上記の例では、main関数より前に関数を定義していたため問題ありませんでした。しかし、main関数をコードの最初に置きたい場合など、呼び出しより後に関数を定義すると、通常はコンパイルエラーになります。
この問題を解決するのが**「プロトタイプ宣言」**です。
プロトタイプ宣言の使い方
プロトタイプ宣言とは、関数の本格的な定義(処理の中身)を後で書くことをコンパイラに予告する、いわば**「関数の紹介状」**のようなものです。
ファイルの先頭(main関数の前)に、関数の処理部分 {} を除いた一行を ; で終えて記述します。
プロトタイプ宣言の構文: 戻り値の型 関数名(引数の型リスト);
プロトタイプ宣言を使ったサンプルコード
先ほどのプログラムを、プロトタイプ宣言を使って書き換えてみましょう。これにより、main関数を一番上に配置し、各関数の本体をその下に書くという、読みやすい構成にできます。
#include <stdio.h>
// --- プロトタイプ宣言 ---
// これからこういう関数が登場しますよ、とコンパイラに知らせる
int calculate_total(int num1, int num2);
int get_user_input(void);
// main関数を先に書くことができる
int main(void) {
int result;
result = calculate_total(10, 20);
printf("最終的な合計値: %d\n", result);
return 0;
}
// --- 関数の定義(本体) ---
int calculate_total(int num1, int num2) {
int user_value = get_user_input();
int total = num1 + num2 + user_value;
return total;
}
int get_user_input(void) {
int value;
printf("整数を入力してください: ");
scanf("%d", &value);
return value;
}
大規模なプログラムでは、プロトタイプ宣言をヘッダーファイル (.h) にまとめて、ソースファイルを整理するのが一般的です。
まとめ
- 関数を使うと、コードの再利用ができ、プログラムが整理される。
- 関数は、戻り値の型、関数名、引数で構成される。
- 関数を呼び出しより後に定義する場合は、プロトタイプ宣言が必要。
自作関数を使いこなすことは、C言語プログラミングにおける大きな一歩です。まずは簡単な処理から関数化する練習を始めてみましょう。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
