У вас есть оператор запятой в состоянии вашего для l oop. Оператор запятой вычисляет свой первый операнд и отбрасывает результат, а затем оценивает второй операнд и возвращает это значение (и тип). Оператор запятой также имеет наименьший приоритет среди всех операторов C / C ++, что означает, что он всегда является последним для привязки к выражению.
Таким образом, условие в вашем для l oop эквивалентно:
(i < 0), 5
Результатом этого выражения всегда будет 5, что не равно 0 (false). Следовательно, условие всегда истинно.
Если вы оставите l oop включенным достаточно долго, в итоге i
, являющееся целым числом со знаком, переполнится. Это приводит к неопределенному поведению (спасибо @ Jarod42).