2012-04-09 50 views
2

我对工会有疑问。假设有一个联合定义为如何在运行时区分c中的工会成员

union emp{ 
    float f; 
    int i; 
}; 

是否有方法可以确定使用哪个联合字段。我所遇到的,我有,如果使用浮点型字段和打印INT如果INT场是打印浮动的情况,低脂功能可能会像事​​先

void print(union u){ 

    // if float field is initialized 
    printf("float field = %f\n",u.f); 

    // if int field is initialized 
    printf("int field = %d\n",u.i); 


} 

感谢。

回答

6

你不能只用union;通常你会将其包装在一个包含某种标签值的struct中。

struct val { 
    enum { EMP_INT, EMP_FLOAT } tag; 
    union emp { 
    int i; 
    float f; 
    } emp; 
}; 
1

不是真的,这取决于你实地访问内存会被解释为一个floatint

你最好的选择是使联合部分的结构,并保持一个标志,指示使用哪个字段。

1

您不能,信息没有存储在运行时的任何地方。

你可以这样做:

struct emp { 
     enum storedValue type; 
     union { 
       float f; 
       int i; 
     } 
}; 

手动存储类型。该枚举然后具有像floatvalintval或类似的值。

而不是一个枚举,你可以使用布尔类似isFloat

相关问题