




Это действительно бесконечный цикл, для выхода из которого требуется break или return (или переход).
Это предпочтительнее эквивалентного while(1), так как он часто выдает предупреждение компилятора, тогда как for(;;) почти наверняка этого не делает.
@ЕвгенийШ. Действительно я; поскольку каждое выражение в for является необязательным, компиляторы не утруждают себя отсеиванием нечетных случаев, поэтому for(;;) зарекомендовал себя как идиома.
некоторые компиляторы жалуются на while(1), где for(;;) заглушает свои предупреждения (Windriver/Diabdata), так что есть разница.
@Jean-FrançoisFabre: Абсолютно!
вы правы для части С++, она отличается, как указано в комментарии под моим ответом: stackoverflow.com/a/52238756/6451573
@ Jean-FrançoisFabre: Хорошая вилка. Только что проголосовал!
благодаря. ценить это. теперь я должен отредактировать комментарий в своем ответе...
Оператор for (см. с99 6.8.5.3) состоит из 3 (необязательных) частей: инициализация, состояние и приращение.
Отсутствие части «условие» интерпретируется как истинный (см. c99 6.8.5.3p2)
... An omitted expression-2 is replaced by a nonzero constant.
Я думаю, вы можете опубликовать свой (хороший) ответ в «исходном» вопросе 2011 года вместо того, чтобы отвечать на очевидные дубликаты.
@Jean-FrançoisFabre: Но тогда pmg пришлось бы обобщать ответ на C++, где цикл for — это другой зверь, и ответчику нужно было бы найти соответствующую стандартную ссылку на C++.
Вы уверены во втором предложении? Я думаю, что это чисто стилистическая вещь.