Инициализация вложенных структур / массивов
У меня есть структура, которая содержит массивы другой структуры, это выглядит примерно так:
typedef struct bla Bla;
typedef struct point Point;
struct point
{
int x, y;
};
struct bla
{
int another_var;
Point *foo;
};
Теперь я хочу инициализировать их в глобальном масштабе. Они предназначены для описания модуля. Я пытался сделать это с помощью составных литералов c99, но компилятору (gcc) это не понравилось:
Bla test =
{
0, (Point[]) {(Point){1, 2}, (Point){3, 4}}
};
Я получаю следующие ошибки:
ошибка: элемент инициализатора не является константой ошибка: (около инициализации для "теста")
Поскольку мне не нужно изменять его, я могу добавить столько "const", сколько необходимо. Есть ли способ скомпилировать его?
1 ответ
Решение
Вам не нужен составной литерал для каждого элемента, просто создайте один составной литеральный массив:
Bla test =
{
0, (Point[]) {{1, 2}, {3, 4}}
};
Убедитесь, что вы компилируете с -std=c99
,