戻り値や引数のない関数を作る
内容更新:2013年7月11日(by EA宮崎)
9章では、引数と戻り値が必ずある関数ばかりを作っていましたが、関数には引数や戻り値のある・なしで全部で4つのパターンがあります。ただ、4つもあると、ややこしくなるので9章では説明していませんでした。けれども、戻り値や引数のない関数は、理解してしまえば簡単なので、興味がある人は見てみて下さい。次のプログラムは、「定価が5000円以上ならば1割引計算をする関数を使ったプログラム」ですが、特別に戻り値や引数のない関数も利用して作ってあります。
上のプログラムでは、4つのパターンの関数を利用して作ってあります。
<引数なし、戻り値なし関数>
上のプログラムの青枠の部分の関数は、引数も戻り値もない関数です。つまり、main関数とデータのやりとりがまったくない場合の関数がこれにあたります。引数および戻り値の型宣言では、それぞれ何も無いという意味のvoid型を指定します。また、return文は必要ありません。「ユーザ関数の作成の決まり文句(引数なし、戻り値なし)」
main関数の中では、ユーザ関数名()と書いて利用する。
<引数なし、戻り値あり関数>
プログラムの赤枠の部分の関数は、戻り値があるけれども、引数がない関数です。つまり、main関数からデータを受け取ることはしていませんが、main関数に結果(戻り値)だけを返す関数です。よって、仮引数にはvoidを宣言する必要があります。「ユーザ関数の作成の決まり文句(引数なし、戻り値あり)」
main関数の中では、ユーザ関数名()と書いて利用する。
<引数あり、戻り値あり関数>
プログラムの茶色枠の関数は、引数も戻り値もある関数です。つまり、main関数との双方向のデータのやりとりがあります。これは、9章で学習済みです。「ユーザ関数の作成の決まり文句」
main関数の中では、ユーザ関数名(実引数,実引数,・・・)と書いて利用する。
<引数あり、戻り値なし関数>
プログラムの緑枠の関数は、引数があるけれども、戻り値がない関数です。つまり、main関数からデータを受け取ることはしているけれども、main関数に結果(戻り値)を返すことはしていない関数です。よって、return文は不要です。「ユーザ関数の作成の決まり文句(引数あり、戻り値なし)」
main関数の中では、ユーザ関数名(実引数,実引数,・・・)と書いて利用する。
<引数、戻り値の省略>
main()のように引数や戻り値を省略して書いている場合もあります。これは、「引数・戻り値が存在しない」という意味とはならず「引数・戻り値は定義されていない」という意味となります。現在のC言語では、このような定義されていない引数・戻り値に関しては、全て整数型(int)が定義されたものと勝手に解釈します。よって、実際の関数でint型ではない仮引数や戻り値が定義されていると、コンパイル時に「型が異なる」というエラーを表示します。これは、C言語が産まれた頃のプロトタイプ宣言が存在せず代わりに行われていた「前方宣言」というものの名残りであり、互換性のために残されていますが利用するのは推奨されていません。