我正在阅读有关union
成员(Section 6.5.2.3p(9)
)的N1570
标准,并遇到以下示例:
以下不是有效的片段(因为联合类型不是 在函数f)中可见:
struct t1 { int m; }; struct t2 { int m; }; int f(struct t1 *p1, struct t2 *p2) { if (p1->m < 0) p2->m = -p2->m; return p1->m; } int g() { union { struct t1 s1; struct t2 s2; } u; /* ... */ return f(&u.s1, &u.s2); }
因此,我自己尝试了一下,发现它可以正常编译:DEMO。
为什么无效?它是不确定的行为吗?你能解释一下吗?