2012-11-09 60 views
0

有問題的代碼是「?something:something_else」。通常在下面的代碼中,可以放置I2C_SLAVE或I2C_SLAVE_FORCE。但是這個代碼做了其他的事情。它是如何工作的,它究竟做了什麼?此代碼如何工作,它叫做什麼

if(ioctl(state.i2c_bus_address, force ? I2C_SLAVE_FORCE : I2C_SLAVE, add) < 0) 
{ 
    logger.fail("i2c select fail %d",add); 
    return -1; 
} 
+1

這是一個「三元操作符」或「條件操作符」。它基本上類似於'if' /'then' /'else',除了它會產生一個值,所以像'a = b? c:d;'給出的結果與if(b)a = c大致相同;別的a = d;'。它可能最常用於C宏,因爲它可以作爲單個表達式來執行。 –

回答

6

它被稱爲三元條件運算符。這就像一個if,但內聯。這裏的格式

boolean ? result evaluated to if true : result evaluated to if false 

這裏是一個例子:

y = x>2 ? 12 : 5; 

如果x大於2,Y爲12,否則ÿ會5.

+1

它是一個三元運算符,意味着它需要3個參數。與二元運算符采用2個參數相同,一元運算符采用一個參數,但該運算符的名稱是「條件運算符」。眨眼眨眼微調。 – Nocturno

+0

儘管只有一個,但我會使用詳細定義:http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Other_operators – GraphicsMuncher

+2

三元運算符與if語句之間的一個重要區別,你演示但沒有明確說明,是三元運算符返回一個值。 Upshot是你可以用一個三元運算符初始化一個變量。這對於必須初始化的引用或const對象尤其重要。 –

3

它的名字是 「條件運算符」 。

condition ? expression1 : expression2 

如果條件計算結果爲真,那麼評估表達式,否則評估表達式2

+3

+1,它的專有名稱是條件運算符,它恰好是三元的。 – Potatoswatter

0

不確定這是否是您要的,但statement ? if_true : if_false控制流稱爲三元運算符。

評估statement。如果這是真的,則評估:之後的表達式。否則,評估:之後的表達式。