GeoCities home page

プログラミング A home page

大域変数の多用はなぜよくないのですか。

Q C 言語には局所変数 (ローカル変数) がありますが、これを使わなくても全て大域変数を用いればいいのではないですか。大域変数なら、関数を呼び出すときも引数を渡す必要がなく、変数を宣言する回数も減るので、局所変数よりも便利だと思うのですが。

A 大域変数を多用するとバグ (プログラムの誤り) の発見が困難になることが、大域変数の多用が良くない理由の1つです。

大域変数を作った場合、どの関数もその中身を変更する権利を持つので、バグの原因を特定することが難しくなります。これは、ビデオデッキが (施錠できる) 自分の部屋にあるか居間にあるか、のちがいのようなものです。録画予約をして出かけたが思い通りに録画できなかった場合、自分の部屋にビデオデッキがあれば全て自分の責任ですが、居間にあれば「家族の誰かが誤操作した (またはいたずらした)」と疑わなくてはなりません。

しかし、どんな場合でも大域変数は望ましくないかというとそうではなく、例えば教科書に良く出てくる

char buff[20];

などは、キーボードから入力された内容を本当に一時的に貯えておくだけなので、大域変数にしてもそれほど問題はありません。