【问题标题】:struct initialization in CC中的结构初始化
【发布时间】:2015-10-30 23:12:43
【问题描述】:

在您将其标记为重复/否决之前,我已阅读书籍,在互联网上花费了大量时间研究此问题,但我找不到答案。

我想在创建结构时对其进行初始化。但我也想使用 typedef 将其声明为类型

这就是我想要做的事情

typedef struct Clock_TAG Clock;

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

它给了我一个错误“将'时钟'重新定义为不同类型的符号”

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

给出“非法初始化器(只能初始化变量)”

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

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

附言 在 .h 文件中 malloc 结构也合法吗?

【问题讨论】:

  • 您没有仔细阅读或不了解 typedef 和 struct 定义和变量定义的工作原理。编译器已经准确地告诉你出了什么问题。而且你永远不应该在标题中定义变量。
  • 我确实仔细阅读过,是的,我缺乏理解,这就是我问的原因。好吧,在我之前关于 stackoverflow 的问题中,另一个人告诉我这是正确的方法。
  • @Olaf 你也介意解释一下原因吗?
  • 这应该在你阅读的书中解释。如果没有,请阅读更好的。

标签: c struct initialization


【解决方案1】:

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}; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多