c: что делает эта строка?
Я прочитал некоторый код и подошел к этому довольно загадочному синтаксису:
size_t count = 1;
char *s = "hello you";
char *last_word = "there";
count += last_word < (s + strlen(s) - 1); #line of interest
Счет увеличивается, как-то. Но я думал, что оператор<вернет true или false. Что делает эта строка?
3 ответа
В соответствии с таблицей предшественников оператора, <
связывает выше, чем +=
оператор, так что ваш код по сути
count += ( last_word < (s + strlen(s) - 1)) ;
где (A < B)
оценивается либо в 0, либо в 1 примечание, поэтому, наконец, оно сводится к
count += 0;
или же
count += 1;
Примечание: связано с1
или же 0
часть, цитирующая C11
, глава §6.5.8/p6, Реляционные операторы
Каждый из операторов
<
(меньше, чем),>
(лучше чем),<=
(меньше или равно) и>=
(больше или равно) дает1
если указанное отношениеtrue
а также0
если этоfalse
,107) Результат имеет типint
,
В C реляционные операторы всегда дают 0 или 1. Таким образом, это утверждение
count += last_word < (s + strlen(s) - 1);
добавляет 0 или 1 к count
в зависимости от результата сравнения. Это может быть записано как (и эквивалентно):
if (last_word < (s + strlen(s) - 1)) {
count = count + 1;
} else {
count = count + 0;
}
(The else
часть не нужна; добавлено для пояснительной цели.)
C11 (черновик N1548.pdf), операторы отношений, §6.5.8, 6
Каждый из операторов <(меньше чем),> (больше чем), <= (меньше или равен) и>= (больше или равен) должен давать 1, если указанное отношение истинно, и 0, если оно равно ложный. 107) Результат имеет тип int.
В C есть stdbool.h
заголовок, который определяет как true и false. По сути, вы можете думать о базовой реализации как:
#define bool int
#define true 1
#define false 0
true
а также false
определяются как не ноль и равны нулю соответственно. Так что в основном, когда last_word < (s + strlen(s) - 1)
Счет увеличивается на единицу.