将条件检查和变量赋值放在一个if语句中

时间:2011-07-28 14:09:37

标签: c

我正在查看一些遗留的C代码并感到困惑,它类似于:

UINT A, B = 1;
if((A = B) == 1){
   return(TRUE);
} else {
   return(FALSE);
}

我们都知道如果我们这样做(A = B)会有编译器警告,但是这里看起来'if'正在检查A对1,我是否正确?

5 个答案:

答案 0 :(得分:11)

首先,它将B的值分配给AA = B),然后检查此赋值的结果是A并计算为{ {1}}等于1

从技术上讲,你是对的:在检查1A的方式时。

为了使事情更容易阅读,代码相当于:

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);