我在看一些传统的C代码,糊涂了,这是一样的东西:认沽条件检查和变量赋值在一个if语句
UINT A, B = 1;
if((A = B) == 1){
return(TRUE);
} else {
return(FALSE);
}
我们都知道会有一个编译器警告,如果我们做,如果(A = B),但在这里它看起来像对1的“如果”被检查的,对吗?
我在看一些传统的C代码,糊涂了,这是一样的东西:认沽条件检查和变量赋值在一个if语句
UINT A, B = 1;
if((A = B) == 1){
return(TRUE);
} else {
return(FALSE);
}
我们都知道会有一个编译器警告,如果我们做,如果(A = B),但在这里它看起来像对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
}
是啊你的富()检查就像那些fopen()检查。我在这里看到的代码更复杂一点,这让我有点困惑...... – deddebme
如果你想保持在1号线:
if ((A = B), A == 1)
做同样的事情。
我们试图避免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