Страница 1 из 1

Как убрать warning или использование union

Добавлено: Чт авг 25, 2016 07:59:35
ESWANT
Здравствуйте, помогите как правильно проинициализировать такую структуру
в WinAVR

Код: Выделить всё

typedef  struct { 
  unsigned char a;
  unsigned char b;
  }Ta;

typedef union 
        {     
        Ta k;
        unsigned char v[2];
        }Tb;

EEMEM Tb x[3]={
 {'A',1}, 
 {'A',5},
 {0}           }; 

warning: missing braces around initializer
warning: (near initialization for 'x[0].k')

Re: Как убрать warning или использование union

Добавлено: Чт авг 25, 2016 08:25:37
ARV
при инциализации используйте имена полей, которые вы инициализируете:

Код: Выделить всё

Ta var = {.a = 15, .b=25};

Re: Как убрать warning или использование union

Добавлено: Чт авг 25, 2016 08:38:44
ESWANT
ARV писал(а):при инциализации используйте имена полей, которые вы инициализируете:

Код: Выделить всё

Ta var = {.a = 15, .b=25};
А как еще можно? покороче запись бы...
И хотелось бы имя Tb упомянуть...

Re: Как убрать warning или использование union

Добавлено: Чт авг 25, 2016 08:41:13
ARV
да какая разница, какой тип? если у вас сложный тип, указание конкретного имени поля в инициализаторе избавит вас от варнингов и даст требуемый результат. других вариантов у меня для вас нет.

Re: Как убрать warning или использование union

Добавлено: Чт авг 25, 2016 11:40:18
ESWANT
ARV писал(а):да какая разница, какой тип? если у вас сложный тип, указание конкретного имени поля в инициализаторе избавит вас от варнингов и даст требуемый результат. других вариантов у меня для вас нет.
Спасибо

как избавиться от такого warnin-га

Добавлено: Чт авг 25, 2016 11:55:11
ESWANT
Здравствуйте, подскажите как избавиться от такого предупреждения WinAVR

Код: Выделить всё

PORTC SET_BIT(i + 4);
warning: suggest parentheses around + or - inside shift
(SET_BIT это макрос-широкоизвестный)

Re: как избавиться от такого warnin-га

Добавлено: Чт авг 25, 2016 12:28:42
ARV
не пользуйтесь широкоизвестными макросами, пишите все ручками, пока не научитесь.

Re: как избавиться от такого warnin-га

Добавлено: Чт авг 25, 2016 13:22:14
ESWANT
ARV писал(а):не пользуйтесь широкоизвестными макросами, пишите все ручками, пока не научитесь.
не знаю как у Вас но если очень много писать ручками
то большое количество знаков | ~%&++||<< и т.п. в коде
затуманивают смысл всего написанного и большую часть мощности мозга тратишь на обратное преобразование кода
в термины той предметной области, функционал которой был ранее закодирован :)

компилятор же должен привести в такой вид и не писать предупреждения - почему он этого не делает?
PORTC |= (1<<(i + 4));

Я конечно не поленюсь и напишу так но всё равно непонятно

Re: Как убрать warning или использование union

Добавлено: Чт авг 25, 2016 13:30:50
ARV
ESWANT писал(а):почему он этого не делает?
чтобы это понять, надо посмотреть, как устроен "общеизвестный макрос", который, например, мне не известен абсолютно.

Re: Как убрать warning или использование union

Добавлено: Чт авг 25, 2016 16:51:31
Аlex
5 секунд и ответ найден - https://translate.google.ru/#en/ru/sugg ... de%20shift
Неужели это так сложно сделать, прежде чем задать вопрос ? :facepalm: