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

我收到以下错误:

错误:初始化元素不是常量
错误:(接近初始化“测试”)

因为我不需要修改它,所以我可以根据需要在其中添加尽可能多的“const”。有没有办法编译它?

4

1 回答 1

5

您不需要每个元素的复合文字,只需创建一个复合文字数组:

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

确保使用-std=c99.

于 2008-12-12T13:23:45.390 回答