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