Инициализация вложенных структур / массивов - PullRequest
5 голосов
/ 12 декабря 2008

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


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}}
};

Я получаю следующие ошибки:

error: initializer element is not constant
error: (near initialization for 'test')

Поскольку мне не нужно изменять его, я могу добавить столько «const», сколько необходимо. Есть ли способ скомпилировать его?

1 Ответ

5 голосов
/ 12 декабря 2008

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

Bla test =
{
    0, (Point[]) {{1, 2}, {3, 4}}
};

Убедитесь, что вы компилируете с -std=c99.

...