Почему выполняется условие "for (;;)"? - PullRequest
9 голосов
/ 31 января 2010

Поскольку, как я понимаю, «for (;;)» не имеет начальных условий, условий испытаний и условий приращения, и, следовательно, циклы выполняются вечно, мне любопытно, почему условие проверки выполняется в каждом цикле.

Имеет ли пустое выражение ";" оценить как истинный в C? Или это особый случай, обрабатываемый компиляторами?

Аналогичный, но не связанный вопрос .

Ответы [ 2 ]

17 голосов
/ 31 января 2010

Это по определению оператора for на языке Си. 6.8.5.3/2 «Оператор for»:

И пункт 1, и выражение 3 могут быть опущены. Опущенное выражение-2 заменяется на ненулевая константа .

5 голосов
/ 31 января 2010

В языке C нет такой вещи, как «пустое выражение». Если какое-либо выражение отсутствует в операторе for, синтаксически это означает, что все выражение опущено , не то, что оно есть, а пустое.

Цикл for с пропущенным вторым выражением зацикливается навсегда, потому что спецификация оператора for говорит об этом. То есть это специальная функция, относящаяся только к for, а не что-то более общее.

Дополнительно (терминологическая задира) только второе выражение на самом деле является условием . Первое и третье не совсем "условия".

...