我正在看一些遗留的C代码并感到困惑,它是这样的:
UINT A, B = 1;
if((A = B) == 1){
return(TRUE);
} else {
return(FALSE);
}
Run Code Online (Sandbox Code Playgroud)
我们都知道如果我们这样做(A = B)会有编译器警告,但是这里看起来'if'正在检查A对1,我是否正确?
Fer*_*yer 12
首先,它分配的值B,以A(A = B),则它检查是否此分配,这是的结果A和计算结果为1,等于1.
因此从技术上讲,你是正确的:在它的方式检查A对1.
为了使事情更容易阅读,代码相当于:
UINT A, B = 1;
A = B;
if(A == 1){
return(TRUE);
} else {
return(FALSE);
}
Run Code Online (Sandbox Code Playgroud)
相反,您的代码总是分配B给A它,而且它还会检查B(也因此A)的值是否等于1.
关于这一点没有任何"遗产",如果您需要操作的结果但又想检查错误,这通常是一个非常方便的习惯用法:
int result;
if ((result = foo()) != -1)
{
printf("The result is: %i\n", result);
}
else
{
// panic
}
Run Code Online (Sandbox Code Playgroud)