2014-09-25 73 views
0

我見過的條件的語法如下所示,很多示例代碼,以檢查是否有積分值y是兩個界限xz之間:(x <= y <= z)條件語法?

if (x <= y <= z) { //... } 

我想我自己使用此之前,但在運行測試的一小段代碼中,條件總是評估爲真... 現在懷疑我自己的記憶,因爲我確信我已經使用它了! ISO C中允許的語法是?我只是希望它做一些不該做的事情?

老式:

if (x >= y && x <= z) { //... } 

仍然工作的魅力,所以我還沒有完全去到召回的老態龍鍾的階段,只是還沒有;)

+4

如果你設法編譯並運行它,那很可能是「允許的」 - 但它很可能不會達到你期望的效果。 – 2014-09-25 11:16:37

+1

@MattiVirkkunen它編譯時帶有gcc的警告:*「比較像'X <= Y <= Z'沒有它們的數學含義」* – 2014-09-25 11:19:09

+1

@ Jean-ClaudeArbaut:海灣合作委員會對你來說有多棒。 – 2014-09-25 11:20:04

回答

6

我想這一切xyz是一些整數類型,如intlong。浮點通知NaN != NaN .....

第一個if (x <= y <= z)是錯誤的。它被解析爲if ((x<=y) <= z)。一個比較返回一個布爾值,當在一些積分上下文中使用時,它被提升爲0(對於false)或1(對於真)。所以,當x <= y測試表現爲if (1 <= z)當相反x > y測試相當於if (0 <= z)

當記者問到給所有的警告(例如gcc -Wall)一個好的編譯器會警告你。

順便說一句,在偶然的情況下-I永不滿足,但我用C做的代碼,因爲1980s-你真的是if ((x<=y) <= z)我覺得代碼非常離奇需要一個明確的意見,或代碼if (((x<=y)?1:0) <= z)

+0

你假設正確,編輯的OP來澄清。你的第一個補線的結束使我成爲亞當韋斯特的一員...... – Toby 2014-09-25 11:25:27

相關問題