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

Is it legal to declare structures in for loop of C++?

本文关键字:C++ 是否 结构 for 循环 声明      更新时间:2023-10-16

我刚刚在 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

演示

是的,在 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("%dn", 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 是 声明,它声明的任何变量的范围是声明的其余部分和 整个循环,包括其他两个表达式;按执行顺序到达 在控制表达式的第一次计算之前。如果子句 1 是一个表达式,则它是 在控制表达式的第一次计算之前被评估为空表达式.133(