Когда я читал ISO/IEC 9899: 1999 (см.: 6.5.2.3), я увидел пример, подобный этому (выделение мое):
Ниже приведен неверный фрагмент (поскольку тип объединения не отображается внутри функции
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); }
При проверке я не обнаружил ошибок и предупреждений.
Мой вопрос: почему этот фрагмент недействителен?