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

 
 
> безымянные struct и union, WinAVR
ARV
сообщение Jul 28 2010, 07:31
Сообщение #1


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

Группа: Свой
Сообщений: 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

вопрос, как обычно, традиционный: что делать? это баг или фича?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MrYuran
сообщение Jul 28 2010, 07:44
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(ARV @ Jul 28 2010, 11:31) *
все хорошо (если не считать того, что Eclipse такой записи не понимает и не подсказывает при вводе имена этих объединенных полей), пока не начинаешь запихивать такие структуры во flash:
Код
PROGMEM flex_struct_t fixed = {.fix=0, .param = 123};
приводит к ошибке unknown field 'param' specified in initializer

А если запихивать не в флешь?
При обращении к полям нет ошибок?

Если дать имя не только типу, но и структуре, то эклипс наверно начнёт "видеть" её поля.
По крайней мере, в С::В именно так.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ARV   безымянные struct и union   Jul 28 2010, 07:31
- - dimka76   а если попробовать проинитить так КодPROGMEM flex...   Jul 28 2010, 07:49
|- - ARV   Цитата(dimka76 @ Jul 28 2010, 11:49) а ес...   Jul 28 2010, 07:57
|- - dimka76   Цитата(ARV @ Jul 28 2010, 11:57) Цитата(d...   Jul 28 2010, 08:00
- - 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


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:58
Рейтинг@Mail.ru


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