Синтаксис для for
l oop с объявлением: ( 6.8.5 ):
for ( declaration expression_opt ; expression_opt ) statement
Это
for(int i = 0, int j = 1 ; i < 5, j < 4; i++, j++) { }
не не разбирается, потому что
int i = 0, int j = 1 ;
не синтаксически допустим как декларация (или любая форма предложения в C в этом отношении), но
for(int i = 0, j = 1; i < 5, j < 4; i++, j++) { }
будет разбираться, потому что
int i = 0, j = 1;
является допустимым объявлением (с несколькими объявлениями, содержащими инициализатор), а
i < 5, j < 4
является допустимым выражением, содержащим оператор запятой, как
i++, j++
.
(Обратите внимание, что i < 5, j < 4
имеет тот же эффект, что и просто j < 4
, потому что выражения запятых вычисляются слева направо и используется значение конечной части, а поскольку i < 5
не имеет побочных эффект здесь, все выражение эквивалентно просто j < 4
. Вы могли бы вместо этого хотеть i < 5 && j < 4
.)
В исходной форме for
l oop (без декларации) у вас есть ( 6.8.5 )
for ( expression_opt ; expression_opt ; expression_opt ) statement
и точки с запятой используются для разделения 3 (необязательных) выражений.
I В форме, содержащей декларацию, первая точка с запятой анализируется как часть объявления
for ( declaration expression_opt ; expression_opt ) statement
.