Подтвердить что ты не робот

Можно ли инициализировать объединение в декларации?

Например, скажем, у нас есть союз

typedef union {
unsigned long U32;
float f;
}U_U32_F;

Когда объявляется переменная этого типа объединения, существует ли способ установить начальное значение?

U_U32_F u = 0xffffffff;   // Does not work...is there a correct syntax for this?
4b9b3361

Ответ 1

Используйте список инициализаторов:

U_U32_F u = { 0xffffffff };

Вы можете установить другие элементы, кроме первого, через

U_U32_F u = { .f = 42.0 };

Ответ 2

Попробуйте U_U32_F u = {0xffffffff};

Ответ 3

Обратите внимание, что инициализация объединения каждого члена не работает на компиляторах pre-C99, из которых есть удручающее число. Например, текущий компилятор Microsoft C не поддерживает его. (Я смутно помню, что он даже не поддерживает инициализацию первого члена, которая восходит к K & R II, но я могу ошибаться в этом.)