グローバル変数
C++におけるグローバル変数の例を示す。
変数globalはグローバルスコープを持ち、全ての関数から直接アクセスすることができる。
この出力結果は、以下のようになる。
グローバル変数を使用すると、ソフトウェアのソースコードを理解することが困難になる。グローバル変数の値はプログラムのどこからでも参照・変更できるため、グローバル変数がどのように使用されているか、またグローバル変数の値(すなわち状態)がどのように変化するかを理解するためには、プログラム全体を把握しなければならないからである。
以下にグローバル変数により難解になる例を示す。
上記をローカル変数を用いて書きなおした例を示す。
ローカル変数を用いた例ではどの変数が、どの関数呼び出しに作用し、どの関数呼び出しの結果を保持しているかは一目瞭然である。また、いずれの関数も状態を持たず独立しているため、入出力が明確であり、モジュールとしての再利用性も高い。対して、グローバル変数を使用した例では、関数の宣言部(インターフェイス)および呼び出し側だけを見てどの関数がどの変数に影響を与えるかを判断することはできず、入出力が不明瞭であり、モジュールとしての再利用も困難である。また、ローカル変数を用いた例では関数の呼び出し順序を入れ替えることは引数と戻り値だけ意識すれば良く容易であるのに対して、グローバル変数を用いた例ではグローバル変数の作用を全て把握する必要があるため困難である。特にこの困難度合いは、グローバル変数の数とグローバル変数を操作する可能性のある関数の数に比例する。