#include <stdio.h>
typedef struct {
int a;
int b;
int c;
} FIRST_T;
typedef struct {
int x;
int y;
int z;
FIRST_T *p;
} SECOND_T;
typedef struct {
int a1;
int a2;
int a3;
FIRST_T *q;
}THIRD_T;
const FIRST_T p1[]={{1,2,3},{3,4,5},{6,7,8}};
const FIRST_T p2[]={{4,5,12},{7,8,9}};
const SECOND_T my_second[]=
{
{1,2,3,p1},
{4,5,6,p2}
};
const THIRD_T my_third[] = {{1,2,3,my_second[1].p},{4,5,6,my_second[0].p}};
int main() {
//const THIRD_T my_third[] = {{1,2,3,my_second[1].p},{4,5,6,my_second[0].p}};
printf("%d %d %d %d \n",
my_third[0].a1,
my_third[0].a2,
my_third[0].a3,
my_third[0].q[1].c);
}
Я знаю, что если я инициализирую my_third в области действия функции, она прекрасно работает как "В C объекты со статической продолжительностью хранения, такие как объекты, объявленные в области действия файла, могут быть инициализированы только с помощью константных выражений", иначе это дает мне:
ошибка: элемент инициализатора не является постоянным new.c: 41: ошибка: (близка к инициализации `my_third [0] .q ')
Теперь мой вопрос: есть ли любойОбходной путь для меня без перемещения выражения внутри функции.Я не могу двигаться, так как эти структуры используются во многих местах моего кода.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.