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

msc*_*msc 3 c++ for-loop structure declaration

我刚刚在Gcc编译器中试验了以下程序.我想知道,申报循环中的结构并在GCC中正常工作.

#include <iostream>

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

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

DEMO

Jen*_*ens 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
Run Code Online (Sandbox Code Playgroud)

相关C99:

6.8.5.3 for语句

1声明

for ( clause-1 ; expression-2 ; expression-3 ) statement
Run Code Online (Sandbox Code Playgroud)

行为如下:表达式expression-2是在每次执行循环体之前计算的控制表达式.在每次执行循环体之后,表达式-3被评估为void表达式.如果clause-1是一个声明,它声明的任何变量的范围是声明的剩余部分和整个循环,包括其他两个表达式; 它是在控制表达式的第一次评估之前按执行顺序到达的.如果子句-1是一个表达式,则在第一次评估控制表达式之前将其计算为void表达式.