関数定義
新しい関数を作成するには、関数定義を行う必要があります。関数の定義は、次のような形になります。
戻り値型 関数名 ( 仮パラメータリスト ) { 本体 }
戻り値型には、関数が結果として返す値の型を指定します。関数は、自分の呼び出し元に対して関数の処理結果を返すことができます。計算を行う関数であれば、計算した結果を返すことができますし、関数の処理が成功したのか、または失敗したのかといった情報を提供する手段としても用いられています。関数が値を返す必要がなければvoidを指定してください。
関数名には、変数名と同じく任意の名前を設定します。命名規則も変数と同じでアルファベットと数字、アンダーライン_
の組み合わせを使えますが、数字から始めることはできません。関数の役割を表す、分かりやすい名前をつけましょう。
関数名に続く( )内には、関数が受け取るパラメータを宣言します。これを仮パラメータと呼び、関数が呼び出されるときに仮パラメータに値が格納されます。仮パラメータといっても、一種の変数だと考えてかまいません。仮パラメータリストには変数宣言と同じように、宣言する仮パラメータの型と名前を指定します。複数のパラメータを受け取る場合は、カンマ , で区切ってください。
最後に、複合文{ }を関数の本体として指定します。関数が呼び出されると、関数の本体として指定されている複合文が実行されます。
このうち、戻り値型と仮パラメータリストは省略することができます。よって、もっとも単純な関数は、関数名と空の仮パラメータリスト、そして本体だけの構成となります。
func ( ) { }
上記は、もっとも単純な関数の例です。戻り値を省略した場合は、int型の値を返す関数だと解釈されます。この関数は、パラメータを受け取りません。仮パラメータリストにvoidを指定することで、パラメータを受け取らないことを明示的に表すこともできます。
パラメータを受け取らず、戻り値も返さない単純な関数を作成するには、次のような形になります。
void func(void)
{
/*任意のコード*/
}
このコードはfuncという名前の、パラメータを受け取らず結果を返さない関数を作成しています。戻り値型と仮パラメータにvoidを指定することで、パラメータを受け取らず、戻り値を返さないことを表しています。関数の本体となる複合文には、これまでmain()関数内に書いてきたコードと同じように、任意の文を記述できます。
作成した関数を実行するには、printf()関数などを呼び出したときと同じように、関数名に続いて( )内に、関数に渡すパラメータを指定します。関数がパラメータを受け取らない場合は、空の括弧( )を指定します。関数が呼び出されると、処理が呼び出された関数の本体に移行します。上記のfunc()関数を main()関数内のコードから呼び出すには、次のような形になります。
func();
これで、main()関数の実行途中であっても、処理の流れがfunc()関数に移ります。func()関数の本体が順に実行され、すべての処理が終了した時点でfunc()関数を呼び出したmain()関数に制御が戻ります。
サンプル01
#include <stdio.h>
void func(void)
{
printf("func() 関数が実行されました\n");
}
int main(void)
{
printf("main() 関数の開始\n");
func();
printf("main() 関数の終了\n");
return 0;
}
実行結果
サンプル01の実行結果 |
サンプル01は、printf()関数で文字列を出力するだけの単純なfunc()関数を作成しています。main()関数の処理の中でfunc()関数を呼び出し、どのような手順でコードが実行されているかを確認してください。実行結果を見ると、main()関数からfunc()関数を呼び出した時点で処理が func()関数の本体に移っていることが確認できます。そしてfunc()関数の処理が終了した時点で呼び出し元に戻っています。