Перейти к содержанию
    

Анонимные структуры IAR vs Keil

-Приветствую, есть проект на "Сях в ИАР-е , в нем плотно используются структуры с "автоопределением" типа:

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

компилятор пропускает лишь объявление\определение, с предупреждением,

но при попытке обратиться к члену дает ошибку...

Может у кого-то будут идеи как минимальными затратами исправить ситуацию, уж больно не хочется перелопачивать всё )

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уши бы поотрывал этому писателю!

Если ты не можешь запомнить, что нумерация бит в байте при ЛЮБЫХ условиях начинается с НУЛЯ, а не с единицы, то пора задуматься о смене профессии...

 

Теперь по теме:

Под какой таргет пишете?

Какой стандарт языка задаёте компилятору?

Какая версия keil?

 

HINT:

http://electronix.ru/forum/lofiversion/index.php/t88403.html

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уши бы поотрывал этому писателю!

Если ты не можешь запомнить, что нумерация бит в байте при ЛЮБЫХ условиях начинается с НУЛЯ, а не с единицы, то пора задуматься о смене профессии...

Простите, а с чего Вы решили, что автор этого не знает или не запомнил? Приведенный код в этом намеков не содержит. Названия полей - так-то может удобнее так (часто и бывает)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какой стандарт языка задаёте компилятору?

Не С99 вот и вся "проблема".

 

 

может удобнее так (часто и бывает)

Может еще и типа TRUE equ 0, признаете "удобнее"?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может еще и типа TRUE equ 0, признаете "удобнее"?

Зачем утрировать? Не совсем тот случай

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уши бы поотрывал этому писателю!

Если ты не можешь запомнить, что нумерация бит в байте при ЛЮБЫХ условиях начинается с НУЛЯ, а не с единицы, то пора задуматься о смене профессии...

-спасибо за совет, почти по-Фрейду, особенно если учесть что у меня есть документы радиста и диплом радиоинженера одного из питерских вузов..

Хочу возразить вам, в случаях если битовая нумерация отражает ,например, работу анодных ключей индикатора, то физическая нумерация разрядов может отображатьсяна

их битовые эквиваленты ,для удобства и во избежании путаницы..

Извиняюсь что вырвано из контекста, но это не моветон)

 

Опции компилятора: --c99 -c --cpu Cortex-M3

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

при объявлении:

warning: #64-D: declaration does not declare anything

при доступе:

error: #20: identifier "bit_2" is undefined

Изменено пользователем dimone

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, вижу, попробовал.

Почитал тут срач https://rsdn.ru/forum/cpp/4809952.flat - охота заморачиваться с анонимностью отпала напрочь. Может ну ее?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..- охота заморачиваться с анонимностью отпала напрочь. Может ну ее?

-И я склоняюсь к этому, точнее уже морально готов править тонну кода,

но людям же свойственно пытаться прокатить "на шарика", и вот попытка не пытка.. :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделать структуру именованной, а потом заменить одним махом в Notepad++ bit_1 на bits.bit_1. А еще лучше - на Anode.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделать структуру именованной, а потом при помощи define задать для старого имени из исходников эквивалент имени члена новой структуры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделать структуру именованной, а потом при помощи define задать для старого имени из исходников эквивалент имени члена новой структуры.

-cамое простое и логичное решение, в моеи ситуации, как сразу не допер..

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем утрировать? Не совсем тот случай

Именно тот случай.

Либо давай имена в соответствии с исполнительными механизмами на более высоком уровне абстракции, либо не изобретай велосипед вовсе. И диплом радиоинжинера тут совершенно не причём.

Есть люди с двумя-тремя дипломами, а программировать не умеют...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитал тут срач https://rsdn.ru/forum/cpp/4809952.flat - охота заморачиваться с анонимностью отпала напрочь. Может ну ее?

Никаке срачи читать не собираюсь, поскольку неименованные структуры безмерно полезны. Когда приходится изредка описывать, например, протоколы под убогие компиляторы, то заморочки вылезют немалые, БЕЗ возможности описания таких структур.

 

 

Хочу возразить вам, в случаях если битовая нумерация отражает ,например, работу анодных ключей индикатора....

...то нефиг их называть "битами" да и нумеровать их цифрами.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...