>> Немного устаревшие сведения :). Я сам так думал, но вот
>> 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: unera@debian.org jabber://UNera@uvw.ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
Attachment:
signature.asc
Description: Digital signature