【问题标题】:Nested structures/arrays initialization嵌套结构/数组初始化
【发布时间】:2008-12-12 13:16:14
【问题描述】:

我有一个结构,其中包含另一个结构的数组,它看起来像这样:


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”。有没有办法编译它?

【问题讨论】:

    标签: c compound-literals


    【解决方案1】:

    您不需要为每个元素创建一个复合字面量,只需创建一个复合字面量数组:

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

    确保使用 -std=c99 进行编译。

    【讨论】:

    • 这是否为两个“点”动态分配内存?
    • @aib:是的,它创建了一个由两个文字“点”结构组成的数组(具有静态存储持续时间,因为它在文件范围内)并初始化“test”的“foo”成员以指向它们.它是一种快捷方式,相当于单独定义一个数组,并分配“foo”成员指向它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多