C++ 在C+的for循环中声明结构合法吗+;?

C++ 在C+的for循环中声明结构合法吗+;?,c++,for-loop,structure,declaration,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; } #包括 int main() { int i=0; 对于(结构{{ 9 };} t;i

我刚刚在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;
}
#包括
int main()
{
int i=0;

对于(结构{{ 9 };} t;i < p>是,在for循环中的CaluS-1中用声明(用初始化器)合法化(从C99开始)。让我们把C++转换成C代码(因为当我写这个时,您的问题被标记为“C”):

行为如下:表达式-2是 在每次执行循环体之前求值。表达式-3为 在每次执行循环体后作为无效表达式进行计算。如果子句-1是 声明时,它声明的任何变量的范围都是声明的剩余部分,并且 整个循环,包括其他两个表达式;它是按执行顺序到达的 在控制表达式的第一次求值之前。如果子句-1是表达式,则为 在对控制表达式进行第一次求值之前作为空表达式求值。133)


你的演示是用C++(17)编译的,而不是C!你的代码在C中是非法的。那是C++,不是C。那不是C程序;你的演示链接使用G++STD= GNU++17。当你尝试它时发生了什么?在C,AFAIK中,你不能为……声明变量。
$ 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
for ( clause-1 ; expression-2 ; expression-3 ) statement