Увеличение i
не выполняется после сравнения в каждом тестовом примере.i++
выполняется первым, а затем выполняется сравнение.
Это потому, что когда выражения разделяются запятыми в C, выражения вычисляются слева направо, а значение последнего выражения становится значениемот всего выражения, разделенного запятыми.
Таким образом, значение
i++,i<=8
на самом деле является значением i<=8
, и это сравнение выполняется только после выполнения i++
.
Таким образом, цикл while
здесь
int i=0;
while(i++,i<=8);
эквивалентен
for(i=1; i<=8; i++);
Следовательно, управление выходит из цикла только тогда, когда i
больше 8
.Поскольку i
увеличивается на 1
на каждой итерации, это означает, что цикл заканчивается, когда i
становится 9
.