我在看一些傳統的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