スコープ
変数はいつか死ぬ
変数は、名前の宣言があってから、その複文の終わりまでの間だけで使用できる。
int main() {
// まだ何も使えない
wide; // wide は使えないので、コンパイルできない
int wide; // wide が使えるようになる
{ // スコープの始まり
int narrow; // narrow 生誕
narrow = 1;
wide = narrow; // スコープの外側も普通に使える
} // narrow 死す
wide; // 1
{
int narrow; // narrow 生誕
// 上の narrow とは別の変数、偶然に同名なだけ
narrow = wide + 1;
wide = narrow;
}
wide; // 2
narrow; // narrow は使えないので、コンパイルできない
} // wide が使えなくなる
これを スコープ という。
つまり、複文を使うと変数の生存期間を限定できる。
名前が隠れる
ネストした複文の外側と内側で同名の名前がある場合は、内側のものが優先 される。
{
int num; // A
num = 0;
{
int num; // B
num = 3; // これは B
}
num; // 0。これは A
}
ただし、読みにくくなるので違う名前をつけるべき。