下面给出一个解决方案:
首先定义一个枚举类型,用以标识共用体中哪个成员是可用的:
enum widget_tag {count_w, value+w, name_w};
然后再用结构体将共用体和枚举包装起来:
struct WIDGET
{
enum widget_tag tag;
union
{
long count;
double value;
char name[10];
}data;
}x;
然后,对共用体变量的使用都要涉及两个操作:
既要使用数据成员:
x.data.count = 100;
又定要加上标签:
name_w
之后就可以使用共用体数据了:
void print_w (WIDGET w)
{
switch(w.tag)
{
case count_w:
printf("count %ld\n", w.data.count);
break;
case value_w:
printf("value %ld\n", w.data.count);
break;
case name_w:
printf("name %ld\n", w.data.count);
break;
}
}