繁体   English   中英

从结构访问联盟成员

[英]Accessing a member of a union from a structure

我有一个结构

typedef struct s_var_types_tag
{
    uint8_t type;
    union {
     s_t1_t t1_data;
     s_t2_t t2_data;
     s_t3_t t3_data;
    }
} s_var_types_t;

我有一个函数指针

void (*xkey_to_type[MAX_TYPES])(s_x1_t *x1key, s_var_types_t *val);

我想使用此函数指针并利用数据类型,并调用特定的指针,即

s_var_types_t* obj;
Suppose obj type has been set (obj->type = t1)
xkey_to_type[obj->type](x1key,obj)

在此函数中,我想设置类型的详细信息如果obj类型为t1,则可以访问t1_data,就像其他组件不存在一样。

obj->t1_data.a =  xxx;

但这显示了一个错误,说

request for memberin something not a structure or union

有什么事吗

您所使用的称为“匿名联合”。 这是C11中出现的新功能。 如果您不使用它,则必须命名您的工会会员。

union {
 s_t1_t t1_data;
 s_t2_t t2_data;
 s_t3_t t3_data;
} u;

首先,给您的union一个名字:

union {
 s_t1_t t1_data;
 s_t2_t t2_data;
 s_t3_t t3_data;
} my_union;

然后,您可以访问其字段:

obj->my_union.t1_data.a =  xxx;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM