|
Анонимные структуры IAR vs Keil |
|
|
|
Jun 4 2016, 10:24
|
Частый гость
 
Группа: Участник
Сообщений: 102
Регистрация: 23-02-09
Пользователь №: 45 242

|
-Приветствую, есть проект на "Сях в ИАР-е , в нем плотно используются структуры с "автоопределением" типа: Код static union {struct { сhar bit_1 : 1; char bit_2 : 1; char bit_3 : 1; char bit_4 : 1; char bit_5 : 1; char bit_6 : 1; char bit_7 : 1; char bit_8 : 1; } ; char byte; }; И с использованием членов как: bit_2 =1; или byte=5;Возникла необходимость перетянуть прогу на Кеил, и тут наткнулся на неприятную вещь, как невозможность использовать вышеуказанное непосредственно , при попытке использовать команду препроцессора #pragma anon_unions компилятор пропускает лишь объявление\определение, с предупреждением, но при попытке обратиться к члену дает ошибку... Может у кого-то будут идеи как минимальными затратами исправить ситуацию, уж больно не хочется перелопачивать всё )
|
|
|
|
|
 |
Ответов
|
Jun 7 2016, 19:09
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
А каким образом решается конфликт объявления нескольких разных анонимных структур или юнионов с одинаковыми названиями членов на том же уровне иерархии (локальном/глобальном)? Что там говорит стандарт о вложениях анонимных структур/юнионов? Все анонимные вложения тоже считаются одним уровнем области видимости, на котором запрещены одинаковые имена? Или запрет наложения имён только на том же уровне (не заходя в анонимные структуры), а поиск при компиляции будет вниз по иерархии (по анонимам) до первого встречного совпадающего имени? В последнем случае зарыта грабля. Логично, конечно, если при создании структуры правила поиска будут ближе к разбору исполняемого кода. Но т.к. факт анонимности структуры обнаруживается после создания компилятором её (анонимного) типа, то все проверки имён будут после. Проблема видится в том, что имена членов при этом не должны совпадать ни с какими именованными объектами, которые нельзя замещать на текущем уровне (локальном/глобальном). Это усложняет логику компилятора. Хотелось бы знать - ради чего. Цитата(dimone @ Jun 5 2016, 22:37)  Цитата(jcxz) Сделать структуру именованной, а потом при помощи define задать для старого имени из исходников эквивалент имени члена новой структуры. -cамое простое и логичное решение, в моеи ситуации, как сразу не допер.. Там разве не все члены придётся "задефайнивать"? Ведь <старые имена> это все члены структуры. Цитата(zltigo) неименованные структуры безмерно полезны. Когда приходится изредка описывать, например, протоколы под убогие компиляторы, то заморочки вылезют немалые, БЕЗ возможности описания таких структур. Можно пример? В чём полезность? Как в С99 или другом стандарте безымянная структура объявленная в одном модуле видна другому модулю? Члены/поля структур передаются через хидеры с typedef. А безымянную структуру-переменную вроде как нельзя объявить через typedef. Даже просто указатель на неё не передать в код из другого модуля. Пока наблюдается только полная невидимость глобальной структуры/юниона-переменной извне модуля. А внутри модуля переменная такая, которая в памяти есть, но её адрес получить нельзя. Адрес первого элемента/члена это не то же самое. Но размер узнать можно, если при объявлении было указано предворяющее имя. ЗЫ. Термин модуль здесь в Паскаль-терминологии. Если в Си он что-то другое/большее значит. -------- Кажется можно объявить анонимную структуру-переменную с предворяющим именем, и этот созданный тип перенести в typedef и задать ему имя, которое можно будет использовать в type-cast. Но полученное type-object-name будет только для текущего модуля, т.к. оно создаётся после создания переменной.
Сообщение отредактировал GetSmart - Jun 8 2016, 12:43
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jun 8 2016, 15:55
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (GetSmart @ Jun 7 2016, 22:09)  Можно пример? CODE // Beacon Invite typedef struct bi_s{ air_header_s; union { bi_data_s; ushort data_raw; }; } bi_s; QUOTE В чём полезность? В отсутствии абсолютно лишних сущностей, когда они лишние.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
dimone Анонимные структуры IAR vs Keil Jun 4 2016, 10:24 demiurg_spb Цитата(dimone @ Jun 4 2016, 13:24) Уши бы... Jun 4 2016, 18:21 DASM Цитата(dimone @ Jun 4 2016, 13:24) Уши бы... Jun 5 2016, 01:38 zltigo QUOTE (demiurg_spb @ Jun 4 2016, 21:21) К... Jun 5 2016, 02:36  DASM Цитата(zltigo @ Jun 5 2016, 05:36) Может ... Jun 5 2016, 02:46   demiurg_spb Цитата(DASM @ Jun 5 2016, 05:46) Зачем ут... Jun 5 2016, 20:14 dimone Цитата(dimone @ Jun 4 2016, 13:24) Уши бы... Jun 5 2016, 06:46 DASM Во-во.
Кстати, а какую ошибку он выдает? Jun 5 2016, 06:57 dimone при объявлении:
warning: #64-D: declaration does... Jun 5 2016, 06:59 DASM Да, вижу, попробовал.
Почитал тут срач https://rsd... Jun 5 2016, 07:09 dimone Цитата(DASM @ Jun 5 2016, 10:09) ..- охот... Jun 5 2016, 07:24 zltigo QUOTE (DASM @ Jun 5 2016, 10:09) Почитал ... Jun 6 2016, 15:38  DASM Цитата(zltigo @ Jun 6 2016, 18:38) Никаке... Jun 7 2016, 11:16   zltigo QUOTE (DASM @ Jun 7 2016, 14:16) Речь не ... Jun 7 2016, 16:02 ViKo Сделать структуру именованной, а потом заменить од... Jun 5 2016, 07:49 jcxz Сделать структуру именованной, а потом при помощи ... Jun 5 2016, 17:23  dimone Цитата(jcxz @ Jun 5 2016, 20:23) Сделать ... Jun 5 2016, 18:37 Baser Цитата(GetSmart @ Jun 7 2016, 22:09) А ка... Jun 7 2016, 21:18  GetSmart Цитата(Baser @ Jun 8 2016, 01:18) Компиля... Jun 7 2016, 21:45   Baser Цитата(GetSmart @ Jun 8 2016, 00:45) А пр... Jun 8 2016, 09:16    GetSmart Цитата(Baser @ Jun 8 2016, 13:16) Вообще ... Jun 8 2016, 11:09 jcxz Цитата(GetSmart @ Jun 8 2016, 01:09) -cам... Jun 8 2016, 05:50   zltigo QUOTE (GetSmart @ Jun 9 2016, 00:39) Здес... Jun 9 2016, 02:26    GetSmart Цитата(zltigo @ Jun 9 2016, 06:26) К чемк... Jun 9 2016, 05:35     zltigo QUOTE (GetSmart @ Jun 9 2016, 08:35) Иден... Jun 9 2016, 11:04      GetSmart Цитата(zltigo @ Jun 9 2016, 15:04) Так во... Jun 9 2016, 17:00 ViKo http://www.keil.com/support/man/docs/armcc...59124... Jun 8 2016, 09:22 KRS Насколько я помню
static union
безымянный - это ф... Jun 8 2016, 11:14 GetSmart легко находится в сети
КодHello All
In IAR C it... Jun 10 2016, 09:52 ViKo Топикстартер собирался исключительно имена элемент... Jun 9 2016, 09:19 dimone Цитата(ViKo @ Jun 9 2016, 12:19) Топикста... Jun 14 2016, 12:23  Dog Pawlowa Цитата(dimone @ Jun 14 2016, 15:23) -так ... Jun 14 2016, 22:15 aiwa Цитата(GetSmart @ Jun 9 2016, 08:35) Иден... Jun 9 2016, 13:59
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|