C89 - for循环增量子句中的代码块

时间:2014-03-03 15:46:31

标签: c for-loop grammar c89

根据C89 / C90标准,是否可以在for语句的increment子句中插入一段代码?

例如:

int x = 0, y;
for (y = 0; x + y < SOME_CONST; { y++; x++; })
{
    //code
}

而不是:

int x = 0, y;
for (y = 0; x + y < SOME_CONST; x++)
{
    y++;
    //code
}

到目前为止我所知道的是,它不能与Microsoft C / C ++编译器一起使用,但标准说的是什么?

初始化条款怎么样?我可以在那里放一块代码吗?

2 个答案:

答案 0 :(得分:3)

C89中for 迭代语句的语法是

for ( 表达 opt ; 表达 opt ; 表达式 opt ) 声明

其中表达式 opt 表达式或省略:例如for (;;);有效C。简单地说,{y++; x++;} 表达式 opt ,而是语句。所以它不能在for循环中使用。 x++, y++之类的内容是表达式,其值为y之前的值,因此它可以是。

在C的更高版本中,第一个表达式 opt 被增强为子句,它允许像for (int a...这样的代码。但这在C89中有效。但for (x = 1, y = 2; 之类的代码有效,因为x = 1, y = 2表达式

答案 1 :(得分:2)

您无法执行“阻止”代码,但您可以使用逗号分隔的语句。例如,

int x = 0, y;
for (y = 0; x + y < SOME_CONST; y++, x++ )
{
    //code
}