【C言語】複数の関数を定義する
関数の基本
C言語における関数は、特定の処理をまとめたブロックであり、コードの再利用性や可読性を向上させるために使用されます。
関数の基本構造
関数の基本的な構造は以下の通りです。
#include <stdio.h>
// 関数の定義
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(3, 5);
printf("3 + 5 = %d\n", result);
return 0;
}
複数の関数を定義する方法
複数の関数を定義する場合、main関数の外に定義することで、プログラムを整理できます。
例:複数の関数を定義
#include <stdio.h>
void greet() {
printf("こんにちは\n");
}
int square(int x) {
return x * x;
}
int main() {
greet();
printf("4の2乗は %d です\n", square(4));
return 0;
}
関数プロトタイプの活用
関数の定義をmain関数の後に置く場合、プロトタイプ宣言を使用する必要があります。
関数プロトタイプの例
#include <stdio.h>
void greet();
int square(int x);
int main() {
greet();
printf("4の2乗は %d です\n", square(4));
return 0;
}
// 関数の定義
void greet() {
printf("こんにちは\n");
}
int square(int x) {
return x * x;
}
関数の戻り値とvoid関数
関数には戻り値があるものと、ないもの(void関数)があります。
戻り値のある関数
int multiply(int a, int b) {
return a * b;
}
void関数(戻り値なし)
void printMessage() {
printf("Hello, world!\n");
}
関数の引数と渡し方
関数の引数には、値渡しと参照渡し(ポインタを使用)が存在します。
値渡しの例
void increment(int x) {
x++;
printf("関数内: %d\n", x);
}
int main() {
int num = 10;
increment(num);
printf("関数外: %d\n", num);
return 0;
}
ポインタを用いた参照渡し
void increment(int *x) {
(*x)++;
}
int main() {
int num = 10;
increment(&num);
printf("関数外: %d\n", num);
return 0;
}
変数のスコープと関数
変数のスコープにはローカル変数とグローバル変数があります。
ローカル変数の例
void example() {
int x = 10; // このxはこの関数内でのみ有効
}
グローバル変数の例
int count = 0;
void increment() {
count++;
}
再帰関数の定義
関数が自分自身を呼び出すことで、再帰処理を実現できます。
階乗を求める再帰関数
int factorial(int n) {
if (n == 0) return 1;
return n * factorial(n - 1);
}
関数ポインタを活用する
関数ポインタを使うことで、動的に関数を選択できます。
関数ポインタの例
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int (*funcPtr)(int, int) = add;
printf("3 + 5 = %d\n", funcPtr(3, 5));
return 0;
}
関数を用いたモジュール化
C言語では、複数のファイルに分割して関数を管理することができます。
ヘッダファイルを用いた関数の分割
ファイル構成:
math_functions.h
– ヘッダファイルmath_functions.c
– 関数の実装main.c
– メインプログラム
math_functions.h
#ifndef MATH_FUNCTIONS_H
#define MATH_FUNCTIONS_H
int add(int a, int b);
int multiply(int a, int b);
#endif
math_functions.c
#include "math_functions.h"
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) {
return a * b;
}
main.c
#include <stdio.h>
#include "math_functions.h"
int main() {
printf("3 + 5 = %d\n", add(3, 5));
return 0;
}