Можно ли добавить условия для инициализации переменной в одной строке кода в C? - PullRequest
1 голос
/ 23 января 2020

Я не совсем понимаю эту строку примера:

bool static_read = static_tactile_to_update != -1 && !CapSense_IsBusy();

static_read инициализируется значением, равным static_tactile_to_update (значение типа от -1 до 27). Означает ли != -1 && !CapSense_IsBusy(), что static_read не получит эту переменную, если static_tactile_to_update равно -1? (или если CapSense_IsBusy() возвращает true)

Я просто хочу знать, используются ли not и and в качестве условий, которые будут препятствовать передаче переменной на новое значение, если они не встречал.

Ответы [ 2 ]

6 голосов
/ 23 января 2020

Из-за приоритета оператора это интерпретируется как

bool static_read = ((static_tactile_to_update != -1) && !CapSense_IsBusy());

Это не установка static_read на значение static_tactile_to_update, это установка значения сравнения с -1 и логически И с помощью !CapSense_IsBusy().

Кроме того, из-за короткого замыкания && он будет вызывать CapSense_IsBusy() только если static_tactile_to_update !- -1.

Полный лог c по существу эквивалентно этому:

bool static_read;
if (static_tactile_to_update != -1) {
    static_read = !CapSense_IsBusy();
} else {
    static_read = false;
}
5 голосов
/ 23 января 2020

Это не условие инициализации переменной, это инициализация переменной с включенным логическим оператором.

static_read - это всегда присваивает результат вычисления выражения:

static_tactile_to_update != -1 && !CapSense_IsBusy();

Это означает, что единственный способ, которым является true, это если оба static_tactile_to_update не -1 и CapSense_IsBusy() возвращает false.

в каждом если переменной присваивается значение, оно не назначается условно.

Условное присвоение выглядит следующим образом:

bool static_read;

if (...)
  static_read = true;

Также нет ограничений на то, насколько сложным может быть выражение, поэтому вы может соединить столько операторов, сколько необходимо для express логики c, которую вы пытаетесь реализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...