在for循环初始化语句中声明未命名结构体

Unnamed struct declaration inside for loop initialization statement

本文关键字:声明 未命名 结构体 语句 for 循环 初始化      更新时间:2023-10-16

在一个SO线程中,我看到使用未命名的struct作为for循环中不同类型的多个变量的占位符:

例如:

for(struct {
      int i;
      double d;
      char c;
    } obj = { 1, 2.2, 'c' };
    obj.i < 10;
    ++obj.i)
{
  ...
}

使用g++可以很好地编译。
这是标准的c++ 03语法吗?

可以在任何可以使用结构体的地方使用未命名结构体——唯一的区别是它不会获得可以在其他地方使用的名称。你可以在任何可以使用类型的地方声明一个新类型。在大多数地方这样做可能不是特别有意义,但那是另一回事。

我不推荐这样做,除非在非常特殊的情况下,但它是有效的

下面的代码将在c++ (g++ 5.4.0)中运行。

http://rextester.com/ELWLF59792

//g++  5.4.0
#include <iostream>
#include <stdio.h>
int main()
{
      int i = 0;
      for(struct st{ int a[9]; }t;i<3;i++)
            printf("%dn", t.a);
}

和下面的代码将在C (gcc 5.4.0)中工作。

//gcc 5.4.0
#include <stdio.h>
int main()
{
      int i = 0;
      struct st{ int a[9]; }t;
      for(;i<3;i++)
            printf("%dn", t.a);
}