1 関数のまとめ

1.1 関数

関数とは,処理の手続きをまとめたものである.関数を使うことにより,C言語のプログ ラムは -4pt とすることができる.特に,2番目が重要で,「プログラムのソースは分かりやすくなくてはならない」 ということが実現できる.

関数をつくり,使うためには,ソースプログラムを図1の ように記述する.必要な記述は,以下の3つである.

-4pt

関数は特定の処理をする専用のプログラムで,必要な引数を伴って関数名を書けばその関 数のプログラムを実行することができる.処理に必要なデータは関数を呼び出すときに引数とし て渡す.呼出元の引数を実引数,呼び出された関数側の引数を仮引数と言う.関数を呼び 出したとき,実引数の値が仮引数の変数にコピーされる.それを使って,関数は処理を行 い.呼出元へ値を返すときには,return文を使う.return文により返す値を戻 り値と言う.

図 1: ユーザー定義関数を含んだソースプログラムの書き方
\includegraphics[keepaspectratio, scale=1.0]{figure/how_to_make_function.eps}

1.2 変数のスコープ

先週は,C言語の変数のスコープについて学習した.変数のスコープとは,その変数の有 効範囲のことで,それは宣言する場所で決まる.以下の箇条書きと図2に 示すように3 種類のスコープがある. スコープが異なれば,同じ名前の変数名を使うことができる.その場合,優先度の高い順 に並べると,ブロック内宣言の変数 $ \rightarrow$ローカル変数 $ \rightarrow$グローバル 変数となる.
図 2: 変数のスコープ(有効範囲)
\includegraphics[keepaspectratio, scale=1.0]{figure/scope.eps}

1.3 記憶クラス

C記憶クラスは,メモリーにデータを格納する方法のことである.C言語には,4個の記憶 クラス指定子(1)auto,(2)extern,(3)register, (4)staticがある.これらは,変数宣言の先頭に
auto int hogehoge;
extern int fugafuga;
register int foo;
static int bar;

と書く.

記憶クラスは4種類あるが,この中でstaticはローカル変数3とグローバル変数では, 動作が異なる.したがって,5種類の動作があると考える.

記憶クラスを指定しない場合,自動変数(auto)となる.デフォルトは自動変数.そ のため,通常,自動変数を使う場合,記憶クラス指定子autoは書かない. 

表 1: 記憶クラスの特徴
記憶クラス 指定子 特徴
自動変数 auto ローカル変数の場合は,関数が呼び出される毎に記 憶領域の確保と初期化(初期値の指定がある場合)が行われ,関数の処理が終わったときに その変数は消滅する.グローバル変数の場合は,プログラム実行中,変数の記憶領域は保持される.
ローカル変数の静的変数 static プログラムの実行に先立って,記憶領域の確保と 初期が行われる.プログラムの実行中,記憶領域は保持される.
グローバル変数の静的変数 static 分割コンパイルの場合,そのファイルの みで使えるグローバル変数ということを示している.
外部変数 extern この記憶クラスはグローバル変数のみに使う.これが 指定されると,記憶領域の確保は行われず,どこか他のファイルにこの変数があること を示す.記憶領域は,どこか他のファイルにある変数を使う.
レジスター変数 register レジスターを記憶領域として使う.レジスター はCPUの記憶領域で,メインメモリーよりも高速のアクセスが可能である.したがって, 処理の高速になる.


ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成18年12月1日


no counter