我刚刚在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
循环中声明结构是否合法?
答案 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)