带联合的结构:结构没有名为的成员

时间:2014-12-01 22:20:31

标签: c linux linux-kernel

我有以下结构:

struct sched_param {
    union {
        int sched_priority;
        struct lshort_sched_param lshort_params;
    };
};

struct lshort_sched_param {
    int requested_time;
    int level;
};

每当我创建sched_param param1结构并尝试更新param1.sched_priority字段时,我都会收到主题中写的消息。

struct sched_param param1;
param1.sched_priority = 1;

但是,每当我制作sched_param param2并尝试更新param2.lshort_params.level时效果都很好。

struct sched_param param2;
param2.lshort_params.level= 1;

可能是什么原因?

2 个答案:

答案 0 :(得分:3)

这是因为您使用的gcc编译器版本不支持未命名的联合。请参阅此stackoverflow link

答案 1 :(得分:3)

你的工会应该有一个名字,例如

struct sched_param {
    union {
        int sched_priority;
        struct lshort_sched_param lshort_params;
    } union_member_name;
};

然后您可以使用param1.union_member_name.sched_priority