C中的静态结构初始化

时间:2011-10-07 18:09:28

标签: c struct initialization

我有一个 struct 类型,如下所示:

typedef struct position{
    float X;
    float Y;
    float Z;
    float A;
} position;

typedef struct move{
    position initial_position;
    double feedrate;
    long speed;
    int g_code;
} move;

我正在尝试静态初始化它,但我还没有找到办法。这可能吗?

3 个答案:

答案 0 :(得分:30)

它应该像这样工作:

move x = { { 1, 2, 3, 4}, 5.8, 1000, 21 };

结构体和数组的大括号初始值设定项可以嵌套。

答案 1 :(得分:17)

C没有像C ++那样的结构/类的静态成员对象的概念...在C中,结构和函数声明的static关键字仅用于将该对象定义为只在编译期间对当前代码模块可见。因此,使用static关键字的当前代码尝试将无效。另外,您无法像声明那样在声明点初始化结构数据元素。相反,您可以使用designated initializers执行以下操作:

static struct {
    position initial_position;
    double feedrate;
    long speed;
    int g_code;
} move = { .initial_position.X = 1.2,
           .initial_position.Y = 1.3,
           .initial_position.Z = 2.4,
           .initial_position.A = 5.6,
           .feedrate = 3.4, 
           .speed = 12, 
           .g_code = 100};

当然,初始化这样的匿名结构不会允许您创建多个版本的结构类型而无需专门键入其他版本,但如果这就是您想要的,那么它应该可以完成这项工作。

答案 2 :(得分:8)

#include <stdio.h>

struct A {
    int a;
    int b;
};

struct B {
    struct A a;
    int b;
};

static struct B a = {{5,3}, 2};

int main(int argc, char **argv) {
    printf("A.a: %d\n", a.a.a);
    return 0;
}

结果:

  

$ ./test

     

A.a:5