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