如何在C中使用union初始化const结构

时间:2015-03-15 21:35:54

标签: c

我一直试图解决这个问题好几个小时了。虽然我发现了一些类似的问题,但它只是不起作用。 我在结构中有一个联合。现在我想初始化这个struct的const变量。

struct length
{
   int minutes;
   int seconds;
};

typedef struct article
{
   char name[MAXLENGTH_A]
   double price;
   char type;
   union size
   {
      int pages;
      struct length blength;
   } bsize
} art;

现在我想初始化这个struct的const变量。我在某处读到以下内容应该有效,但事实并非如此。我总是得到错误: C2224:' .pages'左边的操作数。不是阶级,结构或联合 C2078:对许多初始化程序

const art book = {"Title", 24.99, NORMAL, { .pages = 50}};

我知道这个例子可以更轻松地解决。但我真正的问题是,初始化联盟的第二个元素,如下所示:

const art book = {"Title", 24.99, AUDIO, { .blength.seconds = 40}};

第一次初始化和第二次初始化都不起作用。 有人能告诉我它是怎么回事吗?我正在使用C99 btw。

2 个答案:

答案 0 :(得分:1)

{ .pages = 50}构造是指定的初始化程序,这是MS C编译器不支持的C99功能(我告诉C89编译器)。这也限制了您仅通过其第一个成员初始化联合的能力。

我可以看到这些限制的方法:使用{ 50 }来初始化pages。然后忘记const并明确初始化.blength.secondsconst声明对象的效果是高估的: - )

答案 1 :(得分:-1)

您需要初始化分钟和秒 您不需要明确指定成员名称 {"标题",24.99,NORMAL,50,40} 应该排序你的问题

Key是成员页面和length.minutes占用与union内部相同的内存空间

希望有所帮助