C中的两部分循环

时间:2016-09-26 14:29:32

标签: c c11

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

提到

for ( declaration expression opt ; expression opt ) statement

6.8.5迭代声明

这是一个拼写错误还是C11在循环中有两个表达式

2 个答案:

答案 0 :(得分:5)

这完全是关于语法的。 6.8.5给出了两种形式的for循环:

for ( expressionopt ; expressionopt ; expressionopt ) statement
for ( declaration expressionopt ; expressionopt ) statement

第二个版本指的是声明循环迭代器变量的情况,自C99以来是新的。

现在,如果我们看看声明的语法是什么意思,可以在6.7中找到:

declaration:
  declaration-specifiers init-declarator-listopt ;

注意最后的分号 - 它需要分号作为语法的一部分。将语法复制/粘贴到for循环的第二个版本中,您就可以得到:

for (declaration-specifiers init-declarator-listopt ; expressionopt ; expressionopt )

答案 1 :(得分:1)

在n1570的后续页面中,我们可以看到:

  

6.8.5.3 for语句
  声明
  for ( clause-1 ; expression-2 ; expression-3 ) statement ...

以后,第1条可以是声明或表达式

在6.7Déclarations中,我们可以看到:

  

语法
声明:
  declaration-specifiers init-declarator-listopt;

我的理解是声明部分包含第一个分号。例如,在for(int i=0; i<10; i++)

  • int i=0;是声明
  • i<10是第一个可选表达式
  • i++是第二个可选表达式