No.20 関数について(1)
今回は、C言語の関数について解説します。
前回の記事をまだ見ていない方は、下記のリンクからぜひ見てください。
前回の記事を見てからこの記事を見ると理解しやすいです。↓
また、わからない点があればぜひコメントお願いします。
わかりやすいように更新させていただきます。
関数とは?
関数を一言で表すと、「特定の処理をまとめた、名前の付いたコードの塊」です。何かデータ(引数)を入れると、中で処理が行われて結果(戻り値)が出てくる物と考えてください。
例えば、電卓で考えてみましょう。「足し算」ボタンを押すと、入力した 2 つの数字を足して結果を表示します。この「足し算」という機能が、プログラミングにおける関数に相当します。
なぜ関数を使うのか
関数を使うことには、以下のような多くのメリットがあります。↓
コードの整理: 複雑な処理を小さな関数に分割することで、コード全体がすっきりと見やすくなります。
再利用性: 同じ処理を何度も書く必要がなくなります。関数を一度定義すれば、必要な場所で何度でも呼び出すことができます。
保守性: コードの修正や変更が容易になります。問題が発生した場合でも、該当の関数だけを修正すれば済みます。
可読性: コードの意図が明確になり、他の人が読んでも理解しやすくなります。
関数の書き方
C言語における関数の書き方は以下の通りです。↓
戻り値の型 関数名(引数1の型 引数1の名前, 引数2の型 引数2の名前, ...) {
// 処理
return 戻り値;
}
それぞれの要素について解説します。
戻り値の型: 関数が処理を行った結果として返す値の型を指定します。例えば、整数を返す場合は int、小数点を返す場合は floatなどを指定します。何も返さない場合は voidと記述します。
関数名: 関数に付ける名前です。処理の内容が分かりやすい名前を付けるように心掛けましょう。
引数: 関数に渡すデータです。必要な場合は、型と名前を指定します。引数が不要な場合は ( ) の中に何も記述しません。
処理: 関数が行う具体的な処理を記述します。
return 戻り値;: 関数が呼び出し元に返す値を指定します。戻り値がない場合は return; と記述します。
関数の呼び出し方
定義した関数は、他の場所から名前を指定して呼び出すことができます。
次のプログラムは、指定した関数を呼び出すときの書き方です。↓
関数名(引数1, 引数2, ...);
引数がある場合は、定義時に指定した型と一致する値を渡します。戻り値がある場合は、その値を変数に格納したり、直接使用したりできます。
関数の例
次のプログラムは、2つの整数の和を計算するプログラミングです。↓
#include <stdio.h>
int add(int a, int b) {
int sum = a + b;
return sum;
} // add関数の定義
int main() {
int x = 5;
int y = 3;
int result = add(x, y); // add関数を使う
printf("%d + %d = %d\n", x, y, result); // 出力: 5 + 3 = 8
return 0;
}
この例では、add という関数が2つの整数 a と b を受け取り、それらの和を計算して返しています。main 関数では、add 関数を呼び出して結果を表示しています
基本は main 関数の前に自分が作った関数を定義します。
そうしないとバグなどが起こる可能性があります。
引数と戻り値について
引数: 関数に渡すデータ(入力)。関数内で処理に利用される。
戻り値: 関数が処理を行った結果として返す値(出力)。関数の呼び出し元で利用できる。
先程の例を考えてみましょう。この関数は、足す数と足される数の2つの数値が必要です。この2つの数値が引数となります。↓
int add(int a, int b) { // aとbが引数
return a + b;
}
int main() {
int x = 5;
int y = 3;
int sum = add(x, y); // xとyを引数としてadd関数に渡している
printf("%d\n", sum); // 8が出力される
return 0;
}
引数の種類
仮引数(かりひきすう): 関数定義時に記述する引数のことです。上記の例では、add 関数の a と b が仮引数です。
実引数(じつひきすう): 関数呼び出し時に実際に渡す値のことです。上記の例では、add(x, y) の x と y が実引数です。
複数の引数の場合
関数は複数の引数を受け取ることができます。引数はカンマ(,)で区切って記述します。↓
void print_values(int x, char c, float f) {
printf("int: %d, char: %c, float: %f\n", x, c, f);
}
int main() {
print_values(10, 'A', 3.14f); // 3つの引数を渡している
return 0;
}
引数がない場合
関数によっては、引数を必要としない場合もあります。その場合は、引数リストを空にします。
void print_message() {
printf("Hello, world!\n");
}
int main() {
print_message(); // 引数なし
return 0;
}
戻り値がない場合
関数によっては、値を返す必要がない場合もあります。その場合は、戻り値の型を void とします。
void print_message() { // 戻り値がないのでvoid
printf("Hello, world!\n");
return; // return文は省略可能
}
void 型の関数では、return 文を省略することができます。return; と記述することもできますが、その場合は関数を途中で終了させる意味になります。
今回は以上です。