将条件检查和变量赋值放在一个if语句中
我正在看一些遗留的C代码并感到困惑,它是这样的:
UINT A, B = 1; if((A = B) == 1){ return(TRUE); } else { return(FALSE); }
我们都知道如果我们这样做(A = B)会有编译器警告,但是这里看起来’if’正在检查A对1,我是否正确?
首先,它将B
的值分配给A
( A = B
),然后检查该赋值的结果,即A
和求值为1
,是否等于1
。
所以从技术上讲,你是对的:在检查A
的方式上是1
。
为了使事情更容易阅读,代码相当于:
UINT A, B = 1; A = B; if(A == 1){ return(TRUE); } else { return(FALSE); }
相反,您的代码总是将B
分配给A
,而且它还检查B
的值(以及A
)是否等于1
。
关于这一点没有什么“遗产”,如果您需要操作的结果但又想检查错误,这通常是一个非常方便的习惯用法:
int result; if ((result = foo()) != -1) { printf("The result is: %i\n", result); } else { // panic }
如果你想把它保持在1行:
if ((A = B), A == 1)
做同样的事情。
正确。 分配后的值A
将与1
进行比较。
此代码示例仅相当于:
return (TRUE);
我们试图避免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);