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

 
 
> Union в разных компиляторах., не могу понять...
MicroDiP
сообщение Dec 22 2007, 16:58
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 104
Регистрация: 31-07-05
Из: Shenzhen, China (深圳市, 中国)
Пользователь №: 7 233



Столкнулся в апликухе от Микрочипа (в исходнике) с таким моментом. Код написан под MCC18. Я использую IAR-pic18. Вопрос - каким образом они объявили объединение вот таким образом:

Код
typedef union _BD_STAT
{
    byte _byte;
    struct{
        unsigned BC8:1;
        unsigned BC9:1;
        unsigned BSTALL:1;
        unsigned DTSEN:1;
        unsigned INCDIS:1;
        unsigned KEN:1;
        unsigned DTS:1;
        unsigned UOWN:1;
    };
    struct{
        unsigned BC8:1;
        unsigned BC9:1;
        unsigned PID0:1;
        unsigned PID1:1;
        unsigned PID2:1;
        unsigned PID3:1;
        unsigned :1;
        unsigned UOWN:1;
    };
    struct{
        unsigned :2;
        unsigned PID:4;                 //Packet Identifier
        unsigned :2;
    };
} BD_STAT;


Смущает собственно объявления нулевого, первого и седьмого битов в первых двух структурах (BC8, BC9 и UOWN). Ведь имена не должны повторяться ? О чём мне и сообщает IAR. Микрочиповский компилятор позволяет это делать ? 07.gif


--------------------
Все языки несут в себе черты своих обладателей. И идиомы каждого языка повторяются снова и снова: "Он чужеземец, а значит - варвар". (Роберт Хайнлайн)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Dec 22 2007, 17:11
Сообщение #2


Гуру
******

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



Некрасиво, конечно - "масло маслянное", но если компилятор пропускает, то криминального в результате ничего не будет.
Лучше убрать и не использовать впредь лишние дублирующие дефиниции.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
MicroDiP
сообщение Dec 22 2007, 17:30
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 104
Регистрация: 31-07-05
Из: Shenzhen, China (深圳市, 中国)
Пользователь №: 7 233



Цитата(zltigo @ Dec 23 2007, 01:11) *
Некрасиво, конечно - "масло маслянное", но если компилятор пропускает, то криминального в результате ничего не будет.
Лучше убрать и не использовать впредь лишние дублирующие дефиниции.


Да мне собственно интересно - это что: особенность MCC18 ? Ошибка ? Опечатка ? Просто хотел взять исходник за основу себе в проект, а раз его ИАР не принимает, то прийдётся сейчас все файлы править где эти биты встречаются. Хотя вот что интересно... Ради этого скачал себе MCC18 компилятор, "вынул" от туда C18_User_Guide... Читаю и там написано всё тоже самое:
Цитата
An anonymous structure defines an unnamed object. The names of the members of an anonymous structure must be distinct from other names in the scope in which the structure is declared. The members are used directly in that scope without the usual member access syntax.


Бред какой-то... Бывает такое, что апликухи могут содержать преднамеренные ошибки ? Другой версии я ПОКА не вижу.


--------------------
Все языки несут в себе черты своих обладателей. И идиомы каждого языка повторяются снова и снова: "Он чужеземец, а значит - варвар". (Роберт Хайнлайн)
Go to the top of the page
 
+Quote Post



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

 


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


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