在 C++ 的 for 循环中声明结构是否合法?
Is it legal to declare structures in for loop of C++?
我刚刚在 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 循环(从 C99 开始)的子句 1 中声明(带有初始值设定项)是合法的。让我们把你的 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 The statement
for ( clause-1 ; expression-2 ; expression-3 ) statement
behaves as follows: The expression expression-2 is the controlling expression that is
evaluated before each execution of the loop body. The expression expression-3 is
evaluated as a void expression after each execution of the loop body. If clause-1 is a
declaration, the scope of any variables it declares is the remainder of the declaration and
the entire loop, including the other two expressions; it is reached in the order of execution
before the first evaluation of the controlling expression. If clause-1 is an expression, it is
evaluated as a void expression before the first evaluation of the controlling expression.133)
我刚刚在 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 循环(从 C99 开始)的子句 1 中声明(带有初始值设定项)是合法的。让我们把你的 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 The statement
for ( clause-1 ; expression-2 ; expression-3 ) statement
behaves as follows: The expression expression-2 is the controlling expression that is evaluated before each execution of the loop body. The expression expression-3 is evaluated as a void expression after each execution of the loop body. If clause-1 is a declaration, the scope of any variables it declares is the remainder of the declaration and the entire loop, including the other two expressions; it is reached in the order of execution before the first evaluation of the controlling expression. If clause-1 is an expression, it is evaluated as a void expression before the first evaluation of the controlling expression.133)