|
безымянные struct и union, WinAVR |
|
|
|
Jul 28 2010, 07:31
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
расширение GNU для GCC вводит возможность задавать в структурах безымянные поля типа struct или union, например, так: Код typedef struct { uint8_t fix; union { uint8_t param; void *ptr; }; }flex_struct_t;
flex_struct_t rec; и потом в зависимости от условий обращаться rec.param или rec.ptr, как будто эти поля родные для структуры. все хорошо (если не считать того, что Eclipse такой записи не понимает и не подсказывает при вводе имена этих объединенных полей), пока не начинаешь запихивать такие структуры во flash: Код PROGMEM flex_struct_t fixed = {.fix=0, .param = 123}; приводит к ошибке unknown field 'param' specified in initializerвопрос, как обычно, традиционный: что делать? это баг или фича?
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
 |
Ответов
|
Jul 28 2010, 07:49
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
а если попробовать проинитить так Код PROGMEM flex_struct_t fixed = {0, 123};
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Jul 28 2010, 07:57
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(dimka76 @ Jul 28 2010, 11:49)  а если попробовать проинитить так Код PROGMEM flex_struct_t fixed = {0, 123}; так можно, но выдается warning. зато так непонятно, что к чему инициализируется - от этого и хочется уйти Цитата(MrYuran @ Jul 28 2010, 11:54)  А если так: Код PROGMEM flex_struct_t fixed = {.fix=0, {.param = 123}}; В ТОЧКУ! спасибо! странно, что все-таки для обращения к полю не надо писать что-то типа rec..param - понимает же GCC, что поля надо достать из union-а...
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Jul 28 2010, 08:00
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Цитата(ARV @ Jul 28 2010, 11:57)  Цитата(dimka76 @ Jul 28 2010, 11:57)  Код PROGMEM flex_struct_t fixed = {0, 123}; так можно, но выдается warning. зато так непонятно, что к чему инициализируется - от этого и хочется уйти а что за предупреждение ?
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
Сообщений в этой теме
ARV безымянные struct и union Jul 28 2010, 07:31 MrYuran Цитата(ARV @ Jul 28 2010, 11:31) все хоро... Jul 28 2010, 07:44 ARV если инициализировать переменную - ошибка все равн... Jul 28 2010, 07:50 MrYuran А если так:
КодPROGMEM flex_struct_t fixed = {.fix... Jul 28 2010, 07:54 IgorKossak QUOTE ... Eclipse такой записи не понимает и не по... Jul 28 2010, 09:00 ARV Цитата(IgorKossak @ Jul 28 2010, 13:00) H... Jul 28 2010, 10:58 MrYuran что-то у вас странное...
Цитата#define var_item(t,... Jul 28 2010, 11:46 ARV Цитата(MrYuran @ Jul 28 2010, 15:46) что-... Jul 28 2010, 12:02 MrYuran Что-то вы перемудрили...
Как можно инициализироват... Jul 28 2010, 12:12 ARV почему все? я инициализирую только в одном вариант... Jul 28 2010, 12:17 ARV Жаль, что все знатоки Си, которых тут немало, не ж... Jul 29 2010, 09:35 ReAl Цитата(ARV @ Jul 29 2010, 12:35) Жаль, чт... Jul 29 2010, 11:32 dimka76 Кодunion{
uint8_t id;
int *num;
};
Вы... Jul 29 2010, 10:30 ARV Цитата(dimka76 @ Jul 29 2010, 14:30) Кодu... Jul 29 2010, 10:42 ARV до этого предположения я как бы дошел, но у меня з... Jul 29 2010, 11:48 ReAl Цитата(ARV @ Jul 29 2010, 14:48) я ведь и... Jul 29 2010, 12:29  ReAl Цитата(ReAl @ Jul 29 2010, 15:29) Но в да... Jul 30 2010, 09:51 neiver А это стандарт такой в Си, что можно инициализиров... Jul 29 2010, 12:09 ARV что-то не выходит каменный цветок и с -fms-extensi... Jul 30 2010, 04:20 ARV на avrfreaks в очередной раз посоветовали написать... Jul 30 2010, 10:58 ARV все-таки на avrfreaks подали идею, как выкрутиться... Jul 30 2010, 18:10 ReAl Цитата(ARV @ Jul 30 2010, 21:10) все-таки... Jul 30 2010, 18:21
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|