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

C言語学習log:関数

やさしいC 第3版 』Lesson8は「関数」です。ようやく12分の8です。恥ずかしながら、これまでのプログラミングの学習で一番続いているかも・・・挫折しまくりです。

関数とは

関数とは一定の処理をまとめて記述する機能で、これを利用すると、複数の処理をひとまとめにして、いつでも呼び出して使うことができます。

C言語で関数を利用するためには、下記の2つの手順を踏むことが必要です。

  1. 関数を作成する(関数を定義する)
  2. 関数を利用する(関数を呼び出す)

関数の定義

戻り値の型 関数名(引数リスト)
{
 文;
 ・・・

 return 式;
}

関数の呼び出し

関数名(引数リスト);

引数と戻り値

呼び出し元から関数に渡す情報を引数といいます。関数の本体で定義されている引数(変数)を仮引数、関数の呼び出し元から渡される引数(値)を実引数と呼びます。
イメージとしてはこんな感じでしょうか。

呼び出し元(実引数)→関数の定義(仮引数)

関数には複数の引数を渡すことができます。関数の中には引数のない関数というものもあり、そのような関数を定義するときは、引数の型をvoidとします。

戻り値は、引数とは逆に関数の呼び出し元に、関数本体から返す特定の情報のことを言います。関数の定義にreturn文がありましたが、この式の値を関数の呼び出し元に返します。

例えば、関数の定義に「return z;」とあり、呼び出し元が「変数 = 関数(引数リスト)」となっていれば、変数に「z」を代入することになります。

変数とスコープ、記憶寿命

変数や配列の宣言は関数の外側で行うこともでき、関数の中で宣言した変数を「ローカル変数」、関数の外で宣言した変数を「グローバル変数」と呼びます。また、メモリが確保されてからメモリが解放されるまでの期間のことを「記憶寿命」といいます。

「ローカル変数」と「グローバル変数」の決まりごとをまとめると下記のとおりです。

  • 変数の名前が通用する範囲のことをスコープと呼ぶ。
  • ローカル変数は、宣言した関数内だけで利用することができる。
  • グローバル変数、はどの関数からでも利用することができる。
  • 異なる関数内のローカル変数は、同じ名前であっても異なる変数を意味する。
  • グローバル変数とローカル変数で同じ名前を使うことができる。その場合、宣言した関数内ではローカル変数を意味する。
  • ローカル変数の記憶寿命は、宣言されてから関数が終了するまでである。
  • ローカル変数(static)の記憶寿命は、プログラムの実行準備時から終了までである。
  • グローバル変数の記憶寿命は、プログラムの実行準備時から終了までである。

関数の宣言

C言語には関数の名前と引数の数をコンパイラに知らせておく仕組みがあり、関数のプロトタイプ宣言と呼びます。関数プロトタイプ宣言は下記のとおりで、ヘッダファイルに記述されます。

戻り値の型 関数名(引数リスト);

C言語の開発環境には、どのプログラムでも使える標準的な処理について定義された関数が添付されており、これらを標準ライブラリ関数といいます。

printfやscanfなどは、標準ライブラリ関数に含まれる関数で、これらの関数プロトタイプ宣言は、開発環境に添付されているstdio.hというヘッダファイルに記述されています。

標準ヘッダファイルをインクルードするには< >で囲み、自分で作成したヘッダファイルをインクルードするには" "で囲みます。

iPhoneアプリ開発の入門書を読んでいても、「引数」や「戻り値」というところですでにつまづいていましたが、本書を読んでSample文を書いて実行しているうちにだいぶイメージが掴めてきました。