Можно ли инициализировать объединение в декларации? - PullRequest
26 голосов
/ 27 января 2010

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

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?

Ответы [ 3 ]

32 голосов
/ 27 января 2010

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

U_U32_F u = { 0xffffffff };

Вы можете установить других участников, кроме первого, с помощью

U_U32_F u = { .f = 42.0 };
3 голосов
/ 27 января 2010

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

3 голосов
/ 27 января 2010

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

...