「関数の基本的な仕組み」で、関数の基本的な仕組みは説明しましたね。
今回は、関数を使うときに必要になる 「関数の宣言」 について解説します。
関数について
関数は、本来、「定義(中身の書かれた本体)」と「宣言(使うことを知らせる)」の2つの部分で構成されます。
今までは、「定義(中身の書かれた本体)」を扱ってきました。
でも、ここで少し疑問に思いませんか?
「いままで関数宣言なんて書いていなかったのに、ちゃんと動いていた!」
ということです。
例えば、次のようなプログラムを見てください。
#include <stdio.h>
int add(int a, int b) // ← 関数を先に定義している
{
return a + b;
}
int main(void)
{
int sum;
sum = add(3, 5); // 定義済みなので使える
printf("%d\n", sum);
return 0;
}このように、「関数を使う場所(main関数)」よりも上に関数の定義を書いている場合は、宣言を省略しても問題ありません。
なぜなら、コンパイラは上から順に読んでいくため、すでに関数の内容を知っているからです。
では、関数が後ろにあるとどうなるのでしょうか?
もし関数が下に書かれていたら、次のようになります。
#include <stdio.h>
int main(void)
{
int sum;
sum = add(3, 5); // ← まだ出てきていない関数
printf("%d\n", sum);
return 0;
}
int add(int a, int b)
{
return a + b;
}この場合、コンパイラは「addという関数が何なのか分からない」となってしまい、コンパイルエラーになります。
こういうときに登場するのが 関数宣言 です。
関数宣言とは
関数宣言(プロトタイプ宣言)とは、「このあとに、こういう関数が登場しますよ」とコンパイラに知らせるための予告文です。
関数宣言の構文は次の通りです。
戻り値の型 関数名(引数の型 引数名, 引数の型 引数名);関数定義の書き方と同じですが、
最後にセミコロン( ; )が必要になります。
#include <stdio.h>
int add(int a, int b); // ← 関数宣言
int main(void)
{
int sum;
sum = add(3, 5); // 先に宣言されているので使える
printf("%d\n", sum);
return 0;
}
int add(int a, int b)
{
return a + b;
}このように、関数宣言(プロトタイプ宣言)をすることで、関数定義をする前に関数を使用することができます。
まとめ
- 関数は、使う前に「宣言」または「定義」が必要
- 先に定義していれば、宣言は不要
- 後で定義する場合は、「宣言(プロトタイプ)」を書く
- 宣言は「戻り値の型 関数名(引数...);」の形式
- 最後のセミコロンを忘れない