2011-07-28 22 views
7

我在看一些传统的C代码,糊涂了,这是一样的东西:认沽条件检查和变量赋值在一个if语句

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

我们都知道会有一个编译器警告,如果我们做,如果(A = B),但在这里它看起来像对1的“如果”被检查的,对吗?

回答

10

首先,它分配的BAA = B)的值,则它检查是否此分配,这是A和计算结果为1的结果,等于1

因此从技术上讲,你是正确的:在它的方式检查A1

为了让事情更容易阅读的代码就相当于:

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

仅仅因为你可以按照写在问题中的方式编写代码,并不意味着你应该这样做。你应该总是喜欢写在这个答案中的代码,因为它没有歧义。 –

+6

如何是原来暧昧?你很清楚,这对我很清楚。 – baash05

5

相反,你的代码总是分配BA,它是另外检查是否B值(因而也A )等于1

没有什么是“遗产”这个,这通常是一个非常方便的成语,如果你需要一个操作的结果,而且要检查错误:

int result; 
if ((result = foo()) != -1) 
{ 
    printf("The result is: %i\n", result); 
} 
else 
{ 
    // panic 
} 
+0

是啊你的富()检查就像那些fopen()检查。我在这里看到的代码更复杂一点,这让我有点困惑...... – deddebme

0

正确的。在转让之后A具有的价值会相比,1

此代码示例仅相当于:

return (TRUE); 
+0

确切地说,我想知道是否会出现这种情况,在这种情况下,任务会失败。如果检查是为了回报Kerrek SB提到的函数的值。 – itisravi

+0

我希望这个问题能够证明这一点.B通常是未知的。 – baash05

2

如果你想保持在1号线:

if ((A = B), A == 1) 

做同样的事情。

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