読者です 読者をやめる 読者になる 読者になる

関数

これまで、プログラムをすべてmain関数の中に書いてきたが、
プログラムが巨大になってくると、読みにくいし、保守性も悪い・・・。

いくつかの処理をまとめて、ひとつの関数とすることで、
ひとつひとつのコードは短く読みやすくすることができる・・・。

main関数やライブラリ関数も、関数の一種だが、自分でオリジナルの関数を定義することもできる・・・。

ここでは、3つのタイプの関数、

  1. 引数も戻り値も持たない関数
  2. 引数を持つが戻り値は持たない関数
  3. 引数も戻り値も持つ関数

を定義し、それぞれの関数を順に呼んでいくプログラムを作り、動作を見ていく・・・。

まず、関数のプロトタイプ宣言・・・。

<戻り値型> <関数名>(引数型 引数名, ...);

関数名、引数、戻り値などをこんな感じで所定の形式で書く・・・。処理内容は書かない・・・。

main関数より後ろに関数を定義した場合、main関数の中で呼ぶその関数がどういうものか識別できずコンパイルエラーとなるので、これが必要・・・。
main関数より前に定義する場合は不要・・・。

print_inner_strは、関数の中で、内部にある文字列を出力する関数・・・。

print_add_resultは、関数の中で、引数として渡された2つの変数の値を足した結果を出力する関数・・・。

get_add_resultは、引数として渡された2つの変数の値を足した値を戻り値として返す関数・・・。

main関数では、x, yの入力のあと、このように呼び出す・・・。

get_add_resultだけ、出力機能が無いので、別途戻り値をprintfで出力している・・・。

関数の定義は、

<戻り値型> <関数名>(引数型 引数名, ...){
  <関数内部の処理内容>;
}

という形・・・。

最初に呼ばれるprint_inner_strの定義は、

printfで"print_inner_str"と出力しているだけ・・・。
引数も戻り値もないので、void・・・。

print_add_resultの定義は、

内部でローカル変数add_resultを用意し、int型の引数x, yの値を加算したものを格納・・・。
それをprintfで出力・・・。

get_add_resultの定義は、

引数x, yを足した値をreturn文で返すようにしている・・・。

実行すると、

$ ./function
x: 10
y: 20
print_inner_str
print_add_result's add_result = 30
get_add_result's add_result = 30

こんな感じ・・・。

Sample/function.c at master · bg1bgst333/Sample · GitHub