C中的结构初始化

struct initialization in C

在您将其标记为 duplicate/downvote 之前,我已经阅读了一些书籍,并在互联网上花费了大量时间对此进行研究,但我找不到答案。

我想在创建结构时对其进行初始化。但我也想使用 typedef

将其声明为类型

这是我正在尝试做的事情

typedef struct Clock_TAG Clock;

struct Clock_TAG{
  int time;
}Clock = {
  0
};

它给我一个错误 "redefinition of 'Clock' as different kind of symbol"

typedef struct Clock_TAG{
 int time;
}Clock = {
  0
};

给予"illegal initializer (only variables can be initialized)"

我知道我必须使用结构的名称来初始化它,我想在创建它时对其进行初始化,所以请不要建议使用 init() 方法。

这是一个示例代码,我想具体了解如何在 .h 文件中进行 typedef 和结构初始化 我知道有很多方法可以解决这个问题,我可以省略使用 typedef 或以其他方式初始化结构成员,但我想了解为什么这会给我一个错误以及如何修复它。

P.S malloc .h 文件中的结构是否也合法?

A typedef 是一个别名,当声明:

typedef struct Clock_TAG Clock;

并在 typedef 之后声明:

struct Clock_TAG{
  int time;
} Clock = {0};
  ^^^^^

您正在尝试初始化一个 struct 名称。您的意思可能是:

typedef struct Clock_TAG Clock;

struct Clock_TAG{
  int time;
} clock = {0};