在外部结构初始化中将内部结构初始化为常量

时间:2016-06-27 13:17:30

标签: c struct initialization typedef

我在struct中有一个struct,在初始化外部struct时我想将内部结构初始化为const。

typedef struct A {
  uint16_t id;
}A;

typedef struct B {
  A a;
  uint16_t data;
}

我知道我可以在用这段代码初始化外部结构时初始化内部结构:

B test = {
  {
    .id = 0x100
  },
  .data = 0
};

我知道我可以这样做:

const A aTest = {
  .id = 0x100
};
B test = {
  .a = aTest,
  .data = 0

但有没有办法让内部初始化直接保持不变?

1 个答案:

答案 0 :(得分:1)

您需要将内部成员定义为const

typedef struct B {
  const A a;
  uint16_t data;
} B;

然后你可以像这样初始化:

B test = {
  {
    .id = 0x100
  },
  .data = 0
};

虽然这会产生编译器错误:

test.a.id=1;