在for循环中声明C ++的结构是否合法?

时间:2018-05-29 10:43:10

标签: c++ for-loop structure declaration

我刚刚在Gcc编译器中试验了以下程序。我想知道,在for循环中声明了结构并在GCC中正常工作。

#include <iostream>

int main()
{
      int i = 0;
      for(struct st{ int a{9}; }t; i<3; i++)
            std::cout<<t.a<<std::endl;
}

那么,在for循环中声明结构是否合法?

DEMO

1 个答案:

答案 0 :(得分:7)

是的,在for循环的第1个子句中使用声明(带初始值设定项)是合法的(从C99开始)。让我们把你的C ++变成C代码(因为我写这个时你的问题标记为“c”):

$ cat x.c
#include <stdio.h>

int main(void) {
    for (struct { int a;} t = { 0 }; t.a < 3; ++t.a) {
        printf("%d\n", t.a);
    }
    return 0;
}
$ gcc -Wall -Wextra -std=c99 x.c
$ ./a.out
0
1
2

相关C99:

6.8.5.3 for语句

  

1声明

for ( clause-1 ; expression-2 ; expression-3 ) statement
     

表现如下:表达式表达式-2是控制表达式   在每次执行循环体之前进行评估。表达式-3表达式为   在每次执行循环体后评估为void表达式。如果第1条是a   声明,它声明的任何变量的范围是声明的剩余部分   整个循环,包括其他两个表达式;它是按执行顺序到达的   在第一次评估控制表达之前。如果子句-1是表达式,那么它是   在第一次评估控制表达之前评估为空表达.133)