は、私はいくつかのレガシーCコードで探していますし、混乱してしまった場合、それはのようなものです:入れ条件のチェックと1で変数代入文で
UINT A, B = 1;
if((A = B) == 1){
return(TRUE);
} else {
return(FALSE);
}
我々はすべて我々があれば行う場合は、コンパイラの警告があるだろう知っています(A = B)が、ここでは 'if'がAと1を照合しているように見えますが、正しいですか?
は、私はいくつかのレガシーCコードで探していますし、混乱してしまった場合、それはのようなものです:入れ条件のチェックと1で変数代入文で
UINT A, B = 1;
if((A = B) == 1){
return(TRUE);
} else {
return(FALSE);
}
我々はすべて我々があれば行う場合は、コンパイラの警告があるだろう知っています(A = B)が、ここでは 'if'がAと1を照合しているように見えますが、正しいですか?
最初A
と1
に評価この割り当ての結果は、1
に等しい場合、それはB
(A = B
)A
の値を割り当て、それをチェックします。
技術的にはあなたは正しい:A
を1
に対してチェックしています。読み、物事を簡単にするために
、コードは同等です:むしろ
UINT A, B = 1;
A = B;
if(A == 1){
return(TRUE);
} else {
return(FALSE);
}
、あなたのコードは常にA
にB
を割り当てており、それがさらにチェックされるかどうかB
の値(したがってまたA
)は1
に等しい。あなたは、操作の結果を必要とするだけでなく、エラーをチェックする場合は、この程度は何も「レガシー」があります
、これは一般的にはかなり便利なイディオムです:
int result;
if ((result = foo()) != -1)
{
printf("The result is: %i\n", result);
}
else
{
// panic
}
ええ、foo()のチェックはfopen()のチェックと同じです。私がここに示したコードはちょっと混乱していて、私はちょっと混乱しました... – deddebme
。
if文を避けて、コードを読みやすくしています。
UINT A, B = 1;
bool fResult = false;
fResult = (A == B);
return(fResult);
また、等しくない(等しくない)条件を満たす必要がある場合は、この例を参照してください。
UINT A, B = 1;
bool fResult = false;
fResult = (A == B);
if(fResult)
{
doThis();
}
else
{
doThat();
}
return(fResult);
質問に書かれているようにコードを書くことができるからといって、あなたがすべきことではありません。あいまいさがないので、この答えに書かれているコードを常に好むべきです。 –
オリジナルはどうやってあいまいですか?それはあなたにはっきりと分かりました。私には明らかです。 – baash05