2008-12-12 7 views
5

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


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», сколько необходимо. Есть ли способ скомпилировать его?

ответ

5

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

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

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

+0

Разве это динамически выделяет память для двух «точек»? – aib 2008-12-16 01:28:37