реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Инициализация полей структуры
skyv
сообщение Feb 13 2014, 13:53
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Всем привет.
Имеем структуру.
typedef struct {
union {
unsigned int word;
struct {
unsigned pole1:8;
unsigned pole2:8;
};
};
} t_mystr;

Подскажите как правильно ее инициализировать.
Делал так, но получаю ошибку.

t_mystr mystr = {
.pole1 = 22,
.pole2 = 55
};

Go to the top of the page
 
+Quote Post
SSerge
сообщение Feb 13 2014, 15:01
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Стандарт С позволяет только анонимные объединения, а у Вас ещё и анонимные sтруктуры есть.
Не всякий компилятор такое разрешает (поскольку не обязан).
В IAR сработает, если разрешить ему расширения языка (*)Standard with IAR extensions.

Исправлено:
Пардон, я всё перепутал.
Стандарт С++ допускает анонимные структуры, а в С их нет.
Зато в С можно использовать инициализацию в стиле .pole1 = 22,
а вот С++ такого не предусматривает.

И то и другое одновременно может быть только как расширение.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 13 2014, 15:45
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Неплохо бы еще и текст ошибки приводить. И язык указывать. С++ вообще не позволяет инициализировать в стиле .member_name = value.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 13 2014, 18:06
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(skyv @ Feb 13 2014, 16:53) *
Делал так, но получаю ошибку.

t_mystr mystr = {
.pole1 = 22,
.pole2 = 55
};

t_mystr mystr = {{
.pole1 = 22,
.pole2 = 55
}};

Ы?
Гцц в режиме gnu99 хавает и так и эдак.
Но я бы на Вашем месте unnamed fields не сильно того... любил sm.gif

Сообщение отредактировал _Pasha - Feb 13 2014, 18:09
Go to the top of the page
 
+Quote Post
SlavaV
сообщение Feb 13 2014, 23:30
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 100
Регистрация: 13-06-06
Из: г.Улан-Удэ
Пользователь №: 18 024



я на Visual C++ инициализирую просто

str - какаято структура

то при инициализации str = {параметр1, параметр2, {вложенная структура} и т.д.}
Go to the top of the page
 
+Quote Post
pokk
сообщение Feb 14 2014, 00:39
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028



Вот пару дней назад встретил такое в коде. IAR на такое не ругается.

Код
wiz_NetInfo gWIZNETINFO = { .mac = {0x00, 0x08, 0xdc,0x00, 0xab, 0xcd},
                            .ip = {192, 168, 1, 123},
                            .sn = {255,255,255,0},
                            .gw = {192, 168, 1, 1},
                            .dns = {0,0,0,0},
                            .dhcp = NETINFO_STATIC };



Код
typedef struct wiz_NetInfo_t
{
   uint8_t mac[6];  ///< Source Mac Address
   uint8_t ip[4];   ///< Source IP Address
   uint8_t sn[4];   ///< Subnet Mask
   uint8_t gw[4];   ///< Gateway IP Address
   uint8_t dns[4];  ///< DNS server IP Address
   dhcp_mode dhcp;  ///< 1 - Static, 2 - DHCP
}wiz_NetInfo;


Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01317 секунд с 7
ELECTRONIX ©2004-2016