C:使用常量子结构初始化结构

时间:2019-07-24 13:55:17

标签: c struct initialization

我有一个名为single_instance的结构的单个实例。此实例包含类型为struct example_type的常量对象。

typedef struct {
  int n;
} example_type;

struct {
  int some_variables;
  // ...
  const example_type t1;
  const example_type t2;
  // ...
} single_instance;

假设我想将single_instance.t1初始化为{1},并将single_instance.t2初始化为{2}

最优雅的方法是什么?

无法进行在线初始化:

struct {
  int some_variables;
  // ...
  const example_type t1 = {1};
  const example_type t2 = {2};
  // ...
} single_instance;

这也不起作用:

struct {
  int some_variables;
  // ...
  const example_type t1;
  const example_type t2;
  // ...
} single_instance {0, {0}, {1}};

我已经阅读了与该主题相关的其他多个线程,但是似乎它们都引用带有“名称”的初始化结构。在这种情况下,我只需要一个single_instance的实例化,因为这种类型应该没有名称。

2 个答案:

答案 0 :(得分:3)

您可以使用指定的初始值设定项显式初始化您感兴趣的成员。其余成员将隐式初始化为0。

struct {
  int some_variables;
  // ...
  const example_type t1;
  const example_type t2;
  // ...
} single_instance = {.t1 = {1}, .t2 = {2}};

答案 1 :(得分:1)

这对我有用(也许您只是在初始化中缺少=):

#include<stdio.h>

typedef struct {
  int n;
} example_type;

struct {
  int some_variables;
  // ...
  const example_type t1;
  const example_type t2;
  // ...
} single_instance = {0, {1}, {2}};

int main() {

    printf("%d %d %d\n", single_instance.some_variables, single_instance.t1.n, single_instance.t2.n);
}