Логические операторы взамен - PullRequest
0 голосов
/ 19 марта 2019

У меня есть функция в программе, которая должна возвращать int, но возвращаемое выглядит так:

return wordlength > 6.0 &&  wordlength< 9.0
       && strcasestr (string, "substring1") && strcasestr (string, "substring2")
       && strcasestr (string, "substring2") && strcasestr (string, "substring4")

Длина слова - это двойное число, которое содержит среднюю длину слов в строке.

Мой вопрос: что на самом деле возвращает оператор return?

1 Ответ

4 голосов
/ 19 марта 2019

Правила приоритета операторов говорят, что реляционные операторы, такие как <, имеют приоритет над &&.Следовательно, подвыражение wordlength > 6.0 && wordlength< 9.0 эквивалентно (wordlength > 6.0) && (wordlength< 9.0).

После того, как это отсортировано, обратите внимание, что && имеет слева направо ассоциативность .Это означает, что если в одном и том же выражении присутствуют несколько одинаковых операторов с одинаковым приоритетом, например, a && b && c, то это эквивалентно (a && b) && c.

Логические операторы, такие как &&, имеютпорядок «короткого замыкания» оценки.Это означает, что в 0 && b только операнд 0 оценивается / выполняется.См. Требуются ли логические операторы короткого замыкания?И порядок вычисления?

И, наконец, логические выражения в C не дают логического типа (как в C ++), а int значения 1 или 0.Несмотря на то, что типом является int, его можно рассматривать так, как будто он имеет тип bool, и вы можете смело писать код, такой как bool b = x && y;.

...