问有没有一种自动方法来跟踪联合体中哪个字段正在被使用?
答没有。你可以自己实现一个显式“标记”的联合体。
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 页