Инициализация вложенных структур / массивов

У меня есть структура, которая содержит массивы другой структуры, это выглядит примерно так:


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,

Другие вопросы по тегам