[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: структуры в C/gcc



On Fri, 27 May 2011, Александр Седов wrote:

2011/5/25 Dmitry E. Oboukhov <unera@debian.org>:
тут наверно есть народ который C хорошо знает. такой вопрос.

допустим имеется структура

struct something {
   int a;
   int b;
};

проинициализировать можно при объявлении так:

struct something a = { .a = 1, .b = 2 }, c = { 2, 3 };

а вот если структура содержит неименованную структуру/union:

struct something {
   union {
       unsigned a;
       struct {
           unsigned char b;
           unsigned char c;

       };
   };

   int x;
   int y;
};
В union можно инициализировать только первое поле, по спецификации.
Прошу учесть.
Так что так:
something x = {{a_val}, x_val, y_val};

 Немного устаревшие сведения :). Я сам так думал, но вот
 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 инициализовать через любое поле
 по стандарту.

 Ю.

Reply to: