【C言語】関数の仕組み
目次
関数の基本
C言語において関数は、特定の処理をまとめて実行するためのブロックです。関数を利用することで、コードの再利用性を高め、プログラムの可読性を向上させることができます。
#include <stdio.h>
void hello() {
printf("Hello, World!\n");
}
int main() {
hello();
return 0;
}
このプログラムでは、hello()
という関数を定義し、main()
から呼び出しています。
関数の宣言と定義
関数を使用する際には、関数の「宣言」と「定義」を理解する必要があります。
#include <stdio.h>
// 関数の宣言
int add(int a, int b);
int main() {
int result = add(3, 5);
printf("結果: %d\n", result);
return 0;
}
// 関数の定義
int add(int a, int b) {
return a + b;
}
関数の宣言は、コンパイラに関数の存在を知らせるために行います。定義は関数の実装部分です。
関数の引数と戻り値
関数は引数を受け取り、値を返すことができます。以下のような例が考えられます。
#include <stdio.h>
// 2つの整数の最大値を求める関数
int max(int x, int y) {
return (x > y) ? x : y;
}
int main() {
printf("最大値: %d\n", max(10, 20));
return 0;
}
変数のスコープとライフタイム
関数内で宣言された変数は「ローカル変数」となり、関数の実行が終わると消滅します。一方、関数外で宣言された変数は「グローバル変数」となり、プログラムの終了まで保持されます。
#include <stdio.h>
int global_var = 100; // グローバル変数
void test() {
int local_var = 10; // ローカル変数
printf("ローカル変数: %d\n", local_var);
printf("グローバル変数: %d\n", global_var);
}
int main() {
test();
return 0;
}
関数ポインタ
関数ポインタを利用すると、関数を変数として扱うことができます。
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int (*func_ptr)(int, int) = add;
printf("結果: %d\n", func_ptr(2, 3));
return 0;
}
インライン関数
インライン関数を使用すると、関数呼び出しのオーバーヘッドを減らすことができます。
#include <stdio.h>
inline int square(int x) {
return x * x;
}
int main() {
printf("平方: %d\n", square(4));
return 0;
}
再帰関数
再帰関数は、自身を呼び出す関数です。典型的な例として、階乗を求める関数があります。
#include <stdio.h>
int factorial(int n) {
if (n == 0) return 1;
return n * factorial(n - 1);
}
int main() {
printf("5の階乗: %d\n", factorial(5));
return 0;
}
関数の応用例
関数を活用すると、プログラムを効率的に設計できます。例えば、関数を使って配列の合計を求めることができます。
#include <stdio.h>
int sum_array(int arr[], int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
}
return sum;
}
int main() {
int numbers[] = {1, 2, 3, 4, 5};
printf("配列の合計: %d\n", sum_array(numbers, 5));
return 0;
}