>> Немного устаревшие сведения :). Я сам так думал, но вот >> ISO/IEC 9899 (http://www.open-std.org/jtc1/sc22/wg14/) >> утверждает следующее: >> >> 6.7.8 Initialization >> .... >> 38 EXAMPLE 13 Any member of a union can be initialized: >> union { /* ... */ } u = { .any_member = 42 }; >> >> >> Так что в С99 можно union инициализовать через любое поле >> по стандарту.
именованный union можно. а неименованный похоже никак :)
> Оок, мои знания о Си дарованы Керниганом-Ритчи. Ну тогда вообще в чём
> проблема? Структуру с анонимными struct/union инициализируем не по
> полям, а линейно, это работает.
работает, но очень некрасиво.
мы микроконтроллеры программируем. поскольку там на борту всего 0.5-1К
RAM то эта RAM экономится жестко. соответственно всякие поля зачастую
упаковываются в байты:
struct something {
uint8_t type;
union {
struct {
unsigned flag1:1;
unsigned field1:5;
unsigned field2:2;
};
struct {
unsigned bla:2;
int ble:3;
int bee:3;
};
};
}
в зависимости от типа type либо одна часть либо другая часть union
актуальна. ну и можно сюда добавить uint8_t data и проинициализировать
union скажем числом 0x23, но это будет довольно
* нечитабельно
* болезненно переживать смену порядка/набора полей в union
--
. ''`. Dmitry E. Oboukhov
: :’ : email: [email protected] jabber://[email protected]
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
signature.asc
Description: Digital signature

