匿名union

#include <stdio.h>

enum node_type{
    t_int,t_double
};

struct node{
    enum node_type type;
    union{
        int t_int;
        double t_double;
    };
};


int main(void)
{
    struct node t;
    t.type = t_int;
    t.t_int = 2;
    printf("The type(t_int:0,t_double:1) is:%d And the data is %d ",t.type,t.t_int);

    t.type = t_double;
    t.t_double = 2.3f;
    printf("The type(t_int:0,t_double:1) is:%d And the data is %f ",t.type,t.t_double);

    return 0;
}

用gcc编译器编译不带-std=c99选项可以编译通过,但是带上这个选项后无法通过,可以替换为-std=gnu99,原因是这个匿名的union是gnu c,而不是standard c

现在c11已经添加上了这个匿名union。另外匿名联合(anonymous union)在内核数据结构中用的比较多

问题来源:http://stackoverflow.com/questions/3228104/anonymous-union-within-struct-not-in-c99

原文地址:https://www.cnblogs.com/linghuchong0605/p/3665661.html