问有没有一种自动方法来跟踪联合体中哪个字段正在被使用?
答没有。你可以自己实现一个显式“标记”的联合体。
struct taggedunion {
enum {UNKNOWN, INT, LONG, DOUBLE, POINTER} code;
union {
int i;
long l;
double d;
void *p;
} u;
};
你必须确保代码字段在写入联合体时始终被正确设置;编译器不会自动为你做任何事情。(C 联合体不像 Pascal 的变体记录。)
参考文献:H&S 第 5.7.3 节,第 143 页