我正在查看一些遗留的C代码并感到困惑,它类似于:
UINT A, B = 1;
if((A = B) == 1){
return(TRUE);
} else {
return(FALSE);
}
我们都知道如果我们这样做(A = B)会有编译器警告,但是这里看起来'if'正在检查A对1,我是否正确?
答案 0 :(得分:11)
首先,它将B
的值分配给A
(A = B
),然后检查此赋值的结果是A
并计算为{ {1}}等于1
。
从技术上讲,你是对的:在检查1
对A
的方式时。
为了使事情更容易阅读,代码相当于:
1
答案 1 :(得分:6)
相反,您的代码总是将B
分配给A
,而且还会检查B
(以及A
)的值是否等于{ {1}}。
关于这一点没有什么“遗产”,如果您需要操作的结果但又想检查错误,这通常是一个非常方便的习惯用法:
1
答案 2 :(得分:2)
如果你想把它放在一行:
if ((A = B), A == 1)
做同样的事情。
答案 3 :(得分:0)
正确。分配后的A
值将与1
进行比较。
此代码示例仅相当于:
return (TRUE);
答案 4 :(得分:0)
我们试图避免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);