2

for2つのループを含む関数がありcount、カウンターと呼ばれる変数を使用しています。最初のループは2番目のループが始まる前に完全に実行を終了するため、名前をリサイクルすることを選択しました。そのため、カウンターが互いに干渉する可能性はありません。G ++コンパイラは、次の警告を介してこれを例外としました。

error: name lookup of ‘count’ changed for ISO ‘for’ scoping
note: (if you use ‘-fpermissive’ G++ will accept your code)

可変リサイクルは、プロのソフトウェア開発では悪い習慣と見なされますか、それとも状況的な懸念ですか、そして私がここで見逃した他の影響は何ですか?

4

4 に答える 4

4

あなたはこれをやっていますか?

for(int count = 0; ...)
{
    ...
}

for(count = 0; ...)
{
    ...
}

gcc2番目countは範囲外であるため、私はそれを望んでいるとは思いません。for最初のループにのみ適用されると思いgccますが、貧弱なコードを受け入れるオプションがあります。2番目を作成するかint count、1番目を外側のスコープに移動すると、gcc幸せになるはずです。

これは状況にもよりますが、私は基本的に変数を再利用しません。変数の名前はその目的を反映する必要があり、関数の途中で切り替えると混乱する可能性があります。必要なものを宣言し、コンパイラーに最適化を任せます。

于 2010-10-16T22:13:18.050 に答える
2

Steve McConnellは、CodeCompleteの関数でローカル変数を再利用しないことを推奨しています。

彼はプロのソフトウェア開発における決定的な実践の声ではありませんが、あなたが決定的な声に到達するのとほぼ同じくらいです。

議論は、それがコードを読みにくくするということです。

何を数えていますか?その後、変数に名前を付けます。

于 2010-10-16T22:07:31.200 に答える
2

for で変数を定義しているようですね。つまり、「for (int count=0; count++; count < x)」? もしそうなら、それは問題であるだけでなく、不明確である可能性があります. 2 番目の for ループで使用する場合は、両方のループの外で定義してください。

于 2010-10-16T22:11:40.730 に答える
1

このようなループ カウンター変数を使用している場合、通常は問題になりません。

for (int i ...; ... ; ...) { 
    ... 
}
for (int i ...; ... ; ...) { 
    ... 
}

ただし、別の変数をシャドウする場合は、次のようにします。

int i ...;
for (int i ...; ... ; ...) { 
    ... 
}

それは危険信号です。

于 2010-10-16T22:12:57.957 に答える