Ответ 1
Без названия union/struct внутри другого union/struct является функцией C11 и некоторыми расширениями компилятора (например, GCC).
C11 §6.7.2.1 Спецификации структуры и объединения
13
Неименованный элемент, спецификатор типа которого является спецификатором структуры без тега, называется анонимной структурой; неназванный член, спецификатор типа которого является спецификатором объединения без тега, называется анонимным объединением. Члены анонимной структуры или объединения считаются членами структуры или объединения. Это применяется рекурсивно, если содержащая структура или объединение также анонимны.
Преимущество этой функции заключается в том, что легче получить доступ к ее неназванному полю объединения:
type_t x;
Чтобы получить доступ к полю a
, вы можете просто использовать x.a
. Сравните с кодом без использования этой функции:
typedef union {
int int32;
int boolean;
time_t date;
char *string;
union u{ //difference in here
struct foo *a;
struct foo *b;
struct foo *c;
};
} type_t;
type_t x;
Вам нужно использовать x.u.a
.