この記事について
C言語基礎 第12回はC言語における関数の使い方について説明していきます。関数とは一連の処理をまとめ、その処理に名前を付けることで、プログラム内で簡単に呼び出すことができます。関数を使用することで、同じ処理を何度も繰り返すことなく、コードの再利用とメンテナンス性の向上が可能になります。
関数の定義と宣言
関数の基本的な使い方として、まず関数を定義する必要があります。一度関数が定義されたら、何度でも関数を呼び出す(使う)ことができます。関数の定義について2通りの方法を紹介します。関数の定義と関数のプロトタイプ宣言です。関数が定義される場所も注意しながら以下のコードを確認しましょう。
#include <stdio.h>
// 関数の宣言(プロトタイプ)
int add(int a, int b);
// 関数の定義
int add(int a, int b)
{
return a + b;
}
int main(void)
{
printf("%d", add(1, 2));
return 0;
}
まず、今までのプログラムと違い、処理がmain関数のブロックの外に記述されていることがわかると思います。C言語では通常関数のプロトタイプ宣言や関数の定義はmain関数のブロックの外に記述されます。それでは、関数のプロトタイプ宣言について確認していきます。プロトタイプ宣言はコンピュータに対して「具体的な処理内容は後で定義します。○○って関数使うのでエラー出さないでくださいね。」といった内容の記述です。書き方は以下の通りです。
//関数のプロトタイプ宣言
戻り値の型 関数名(引数);
戻り値や引数については後に詳しく触れていきます。次に関数の定義について確認していきましょう。関数の定義とはコンピュータに対して「○○ってキーワードが呼び出されたら以下の処理を行ってください。」といった内容です。プロトタイプ宣言とはちがい、具体的な内容も記述していきます。
//関数の定義
戻り値の型 関数名(引数){
処理;
処理;
戻り値;
}
関数の定義では複数の処理をま止める必要がありますので、どこからどこまでが関数のブロックかを明記する必要があります。C言語では'{}’波括弧を使い関数のブロックを指定します。条件分岐などと同じで、ブロックについてはインデントを下げるということも忘れないようにしましょう。
関数の呼び出し
次に定義した関数の使い方について確認していきます。実際に先ほど定義したadd関数を使ってみましょう。
#include <stdio.h>
// 関数の宣言(プロトタイプ)
int add(int a, int b);
// 関数の定義
int add(int a, int b)
{
return a + b;
}
int main(void)
{
printf("add関数を使用します。%d\n", add(1, 2));
printf("もう一度使用します。%d\n", add(5, 10));
return 0;
}
次はmain関数の中身について確認いていきましょう。ここではすでに定義されたadd関数が2回呼び出されています。定義した関数の使うときは以下の通りになります。
//関数の呼び出し
関数名(引数);
関数を呼び出す時は関数名()で簡単に何度でも使用できます。
引数と戻り値
引数
次に、引数と戻り値について学習していきましょう。引数(ひきすう)とは関数に渡す値のことを指します。引数は2種類あり、関数のプロトタイプ宣言と定義の時に使う仮の引数のことを「仮引数」と呼びます。対して、実際に関数を呼び出す時に使う引数のことを「実引数」と呼びます。
#include <stdio.h>
// 関数の宣言(プロトタイプ)
//仮引数int a,int b
int add(int a, int b);
// 関数の定義
//仮引数int a,int b
int add(int a, int b)
{
return a + b;
}
int main(void)
{
//実引数1,2
printf("add関数を使用します。%d\n", add(1, 2));
//実引数5,10
printf("もう一度使用します。%d\n", add(5, 10));
return 0;
}
また、引数を使用しない場合は以下の通りになります。
#include <stdio.h>
// 引数のない関数の定義
void func(void)
{
printf("関数が定義されました。");
}
int main(void)
{
func();
return 0;
}
引数を使わない場合は上記のように仮引数に’void’という空を意味する値を格納します。仮引数の場合は’void’の指定が必要ですが、実引数では’func()’のように何も入れる必要はありません。必要に応じて使い分けできるようになりましょう。次に戻り値について確認していきます。
戻り値
戻り値とは、関数から呼び出し元に返される値を指します。先ほど確認したadd関数では、受け取った二つの値を足すして、呼び出し元に和を返しています。返す値を’return’を使って指定します。また、引数と同じように、戻り値がある関数とない関数があります。以下で確認していきましょう。
#include <stdio.h>
// 関数の定義
int add(int a, int b)
{
return a + b;
}
//関数の定義
void func(void){
printf("引数も戻り値もない関数\n");
}
int main(void)
{
printf("add関数を使用します。%d\n", add(1, 2));
printf("もう一度使用します。%d\n", add(5, 10));
return 0;
}
戻り値のない関数を定義するときは先頭にvoidと記述します。また、returnの文は書く必要はありません。
まとめ
今回は関数の基本的な使い方について学習していきました。関数は処理をまとめることで、記述量が減り、便利になるだけではなく、メンテナンス性の観点からも非常によく使われる機能です。まだまだC言語の関数は奥が深く、学習するべきことがたくさんあります。まずは基本的な書き方を覚えて、次のレベルに挑戦できるようにしましょう。
コメント