为什么不允许第二种语法?

Sab*_*ina 0 c

for ( declaration expressionopt ; expressionopt ) statement
Run Code Online (Sandbox Code Playgroud)

for循环的第二种语法只有一个分号,但每当我尝试使用它时,它会产生一个错误,说:

error: expected `;` before `)` token
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 7

C11标准规定了for循环的两种形式(§6.8.5迭代语句):

  • for ( 表达选择 ; 表达选择 ; 表达选择 ) 语句
  • for ( 声明 表达式opt ;表达式opt _ ) statement

" 声明 " 的规则以分号结束,因此for循环的控制部分中必须有两个分号.

§6.7 声明

声明:
    declaration-specifiers init-declarator-list opt ;
     static_assert-declaration