如何在运行时区分c中的union成员

use*_*752 2 c unions

我对工会有疑问.假设有一个定义为的联合

union emp{
    float f;
    int i;
};
Run Code Online (Sandbox Code Playgroud)

有没有办法确定使用哪个联合字段.我遇到过一种情况,如果使用float字段我必须打印float,如果使用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);


}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

gee*_*aur 6

你不能只说出union; 通常你将它包装在一个struct包含某种标签值的地方.

struct val {
  enum { EMP_INT, EMP_FLOAT } tag;
  union emp {
    int i;
    float f;
  } emp;
};
Run Code Online (Sandbox Code Playgroud)