変数の有効範囲をどう伝えるか

仕事で変数の有効範囲を他者に説明する時に混乱したので整理してみる。

変数の有効範囲は、下記2つの要素で決まる。

  • 宣言箇所( 関数内, 関数外 )
  • 記憶クラス指定子( extern, static, auto, register )の指定

ソースで表すと

gist0473e607c28d6b6d97ff

仕事をするようになって、「関数内」の「記憶クラス指定子無し」の変数を「ローカル変数」から「オート変数」と呼ぶようになったのが大きそうです。

あと、オート変数はauto変数と記憶クラス指定子と関連していて、ローカル変数およびグローバル変数は宣言箇所と関連している*1のが混乱の元になっている。本来、組み合わせで変数の有効範囲を説明するべきなのに、片方だけを取り上げて有効範囲を説明している。

混乱の要因は整理できたと思うので、後は仕事先の言葉から外れないように有効範囲の説明をしていこう。

*1:関数内で宣言する変数は局所(ローカル)変数、関数外で宣言する変数は広域(グローバル)変数と説明している資料を見かける