10/04/30 09:39:00
>>561
ちょっと解釈は変かな。
本来、関数内で違う目的に同じ名前の変数を使うのは設計が悪い。
但し、ループ制御変数みたいに同じ*ような*目的に一々違う名前を使う習慣がない場合もある。
そんなとき、次のループで前のループ制御変数をそのまま使うと問題がある*かもしれない*し、ループだけ移動するかもしれない。
だったら有効範囲を限定してしまえば宣言を遠くまで探しに行かなくて済むし、影響を心配することもなくなるということ。
但し、古いCではブロックの途中での宣言ができないことと問題のfor文内での宣言ができないことに注意。
--
void func(int a)
{
int b = a; // ブロックの先頭なので問題なし
if (a == 0) return;
int c = a; // ブロックの先頭ではなくif文の後なので古いCではエラー
{
int d = a; // ここはブロックの先頭なので問題なし
for (int i = 0; i < a; ++i) { // for文内での宣言は古いCではエラー
int e = a; // ここもブロックの先頭なので問題なし
}
for (d = 0; d < a; ++d) ; // これは当然、問題なし
}
--
>>560
グローバル変数を極力使用しないのは、有効範囲を限定する目的以外にも名前を公開しないと言う目的もあることに注意。