联合体(union)在结构体(struct)中的初始化(gcc语法)

今天编译kvm upstream时,发现如下的错误,是一个struct里面的union的初始化时的语法错误,所以简单总结了一下。本博客中提及的对C的编译,默认情况下,使用的是GCC作为编译器(gcc version >= 4.4.0)。

arch/x86/kvm/pmu.c: In function 'reprogram_counter':
arch/x86/kvm/pmu.c:173: error: unknown field 'sample_period' specified in initializer

我写了一个patch去fix这个问题,发到kvm mailing list中,redhat的人告诉说已经在kvm next tree中fix过了;不过我只改了两行的patch如下。


这个问题就在于union中的成员(这个union在一个struct中),不能在结构体初始化时,直接地同结构体的普通成员一样初始化。当然如果定义结构体时顺便定义其中的联合体,那么是可以在结构体初始化时,就一起初始化联合体里面的成员。说的很绕,可能没表达的很清楚,还是看下面的代码吧。

master

Stay hungry, stay foolish.

发表评论

邮箱地址不会被公开。 必填项已用*标注

*