在struct中初始化零数组会导致错误

时间:2012-03-25 09:57:51

标签: c arrays structure

我正在尝试将结构集内的数组初始化为全零。

typedef struct month {
    char name[19];
    int yearCounts[10] = { 0 };
    struct month *next;
} MONTH;

编译器似乎不想让我将yearCounts设置为结构中的值。我得到了旧的错误: “预期â:â,â,â,â€â€â€â€

这对我来说似乎很奇怪,因为在结构定义之外的确切声明似乎工作正常。如果我在不尝试设置其值的情况下初始化数组,那么它也可以正常工作。

我是否遗漏了一些愚蠢的东西,或者我不允许在结构定义中使用值初始化数组?

我正在使用C89标准中的gcc编译,如果这有所不同。

3 个答案:

答案 0 :(得分:3)

  

我错过了一些愚蠢的事情,或者我不允许初始化   结构定义中包含值的数组?

初始化程序在结构声明中没有意义。

答案 1 :(得分:2)

您不能将初始化指定为类型定义的一部分。您必须等待初始化,直到您定义该类型的对象。使用C89 / 90编译器,在没有首先初始化yearCounts的情况下,没有真正的方法来初始化name。在C99或更新版本中,您可以使用指定的初始值设定项仅初始化yearCounts

MONTH m = { .yearCounts = {0} };

答案 2 :(得分:0)

由于typedef仅定义MONTH(而不是MONTH类型变量实例的实际声明),因此没有任何内容可以初始化。

typedef struct month {
    char name[19];
    int yearCounts[10];
    struct month *next;
} MONTH;

/* declare month as MONTH and initialise it to all zeros. */
MONTH month = {0};