【C言語】関数の仕組み

【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;
}
    

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です