2016-10-03 44 views
0

我想比較兩個整數變量的同一個常量。顯然在這種情況下,兩個變量都具有相同的默認值。我試圖簡化比較說明是這樣的:C if語句比較兩個整數變量的相同常數

if (po->app_tag == po->inst_id == 0) 
    return 1; 

它沒有工作。

我不得不代碼它喜歡:

if ((po->app_tag == 0) && (po->inst_id == 0)) 
    return 1; 

要使它發揮作用。任何人都可以向我解釋兩者之間的區別嗎?不知怎的,我覺得C編譯器在比較兩個整型變量時應該有這種語法的規定。我可能錯了,要求.. :),但想了解一個原因..我爲什麼在這裏錯了。

+1

你知道表達式'a == b'可以返回哪些值嗎? –

+0

當您將一個變量與另一個比較的結果進行比較時,您將它與0或1比較,這可能不是您想要的:http://stackoverflow.com/questions/18097922/return-value-of- operator-in-c –

+0

@EugeneSh。是的..犯了一個基本的錯誤... –

回答

3

由於==操作(從左邊關聯到右)的相關性,

po->app_tag == po->inst_id == 0 

被解釋爲:

(po->app_tag == po->inst_id) == 0 

這就是語言是如何定義的。

使用

(po->app_tag == 0) && (po->inst_id == 0) 

修復該問題通過獨立地評估po->app_tag == 0po->inst_id == 0以及執行布爾AND這兩個之間。

有關運算符優先級和關聯性的更多信息,請參閱http://en.cppreference.com/w/c/language/operator_precedence

+0

感謝您的詳細解釋..! –

1

po->app_tag == po->inst_id == 0將被解釋爲(po->app_tag == po->inst_id) == 0 - 也就是說,被比較0的東西不是兩個變量分別,但po->app_tag == po->inst_id結果。如果兩個值相等,該操作將返回1,如果不相等,則返回0。實際上,那麼,po->app_tag == po->inst_id == 0相當於po->app_tag != po->inst_id,這不是你想要的。

+0

感謝您的詳細解釋..! –

0

這是C/C++編譯器的工作方式。比較表達式只能比較兩個變量。如果您需要更多,則需要使用邏輯AND(&&)或OR(||)表達式。如果你想比較一個變量和多於兩個const值,你可以使用switch語句。