Код, о котором идет речь, — это «что-то: что-то еще». Обычно в приведенном ниже коде вы можете указать либо 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;
}
Это называется троичный условный оператор. Это как если, но встроенный. Вот формат
boolean ? result evaluated to if true : result evaluated to if false
Вот пример:
y = x>2 ? 12 : 5;
Если x больше 2, y будет 12, иначе y будет 5.
Это имя «условный оператор».
condition ? expression1 : expression2
Если состояние оценивает к истине, затем оценивает выражение1, иначе оцените выражения2.
Не уверен, что это то, что вам нужно, но statement ? if_true : if_false
Управление потоком называется троичным оператором.
statement
оценивается. Если это правда, выражение после :
оценивается. В противном случае выражение после :
оценивается.