Как объяснить этот выход C-союза
#include <stdio.h>
union p
{
int x;
char y;
}
k = {.y = 97};
int main()
{
printf("%d\n", k.y);
return 0;
}
OUTPUT: 97
Я столкнулся с этим Вопросом. Как мы знаем, мы можем только инициализировать первого члена Союза. Но в этом, во время инициализации, переменная y
инициализируется с помощью некоторого заданного метода!
Может ли кто-нибудь объяснить это мне, как k = {.Y = 97} нарушает правило, указанное в книге Денниса Ритчи "Союз может быть инициализирован только значением типа его первого члена" и вместо инициализации второй переменной?
Ответы
Ответ 1
K & R - отличная книга, но она старая. В C99 вы можете сделать это.
Используя назначенный инициализатор в том же примере, инициализирует второй возраст члена союза:
union {
char birthday[9];
int age;
float weight;
} people = { .age = 14 };