Объявление структуры без имени внутри для оператора инициализации цикла

В одном из потоков SO я видел использование неназванного struct выступая в качестве заполнителя для нескольких переменных разных типов внутри цикла for:

Например:

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

это компилирует нормально с g ++.
Это стандартный синтаксис C ++ 03?

5

Решение

Вы можете использовать безымянную структуру везде, где можете использовать структуру, с той лишь разницей, что она не получает имя, которое можно использовать где-то еще. Вы можете объявить новый тип везде, где можете использовать тип. Это может не иметь особого смысла в большинстве мест, но это другой вопрос.

Я бы точно не рекомендовал это, кроме как в очень особых случаях, но это действительно.

3

Другие решения

Ниже код будет работать на 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("%d\n", 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("%d\n", t.a);
}
-1