Как объяснить этот выход C-союза - программирование
Подтвердить что ты не робот

Как объяснить этот выход 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} нарушает правило, указанное в книге Денниса Ритчи "Союз может быть инициализирован только значением типа его первого члена" и вместо инициализации второй переменной?

4b9b3361

Ответ 1

K & R - отличная книга, но она старая. В C99 вы можете сделать это.

Используя назначенный инициализатор в том же примере, инициализирует второй возраст члена союза:

union {
       char birthday[9];
       int age;
       float weight;
      } people = { .age = 14 };