2

一部のプログラマーは、意図しない割り当てを避けるためif(1 == var)に代わりに使用していると聞きました。if(var == 1)なぜ、またはどのような場合に意図しない割り当てが発生するのですか?

4

2 に答える 2

13

問題は、ステートメントを間違って入力した場合です。

if (var = 1)

if (1 = var)

最初のケースでは、 の後のコードifは無条件に実行されます (コンパイラからの警告のみで、警告を生成する義務はありませんが、良いコンパイラを使用していない場合は、警告を生成する義務はありません)。 、1つ入手してください!)。2 番目のケースでは、コンパイル時に構文エラーが発生するため、コードをコンパイルする前に問題を修正する必要があります。

問題は常に露骨であるとは限りません。

if (var = 0)

ifもちろん、の後にコードを実行することはありません。ただし、多くの場合、次のようになります。

if (var = function(arg1, arg2))

割り当てるつもりなのか、比較するつもりなのかはっきりしません。次のように記述して、コンパイラとコード リーダー (人間) に明確にすることができます。

if ((var = function(arg1, arg2)) != 0)

また

if (var == function(arg1, arg2))

「前後」の比較手法は使用しません。逆の条件は、ほぼ常に「間違っている」と解釈されるため、嫌いです。1 を変数と比較していません。私は自分の変数を 1 と比較しています。したがって、論理的には==演算子は可換ですが、私は可換的に考えず、その「リスクの高い」方法を好みます。問題が問題になるのに十分な頻度で、割り当てと等価の間違いを犯していることに気づきませんでした。コンパイラは、間違いを犯した場合に警告します (そして、警告に注意を払い、問題がないようにコードを修正します)。

于 2012-09-22T00:19:09.173 に答える
4

と間違えると

if (var = 1)

意図しない(?)代入が発生する可能性があります。まともなコンパイラは、余分な括弧のセットを含めない限り、それについて警告します

if ((var = 1))

コンパイラに意図を明確にするため。

于 2012-09-22T00:18:56.107 に答える