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

 
 
> Видимость переменных, Проблема с enum
Пал
сообщение Apr 1 2009, 09:32
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 3-12-08
Пользователь №: 42 171



Понимаю, что тема уже неоднократно обсуждалась, но найти ничего не могу, потому спрошу здесь. Проект(ARM+Keil) содержит много сишных файлов. У каждого свой хидер. Переменные объявляю в сишниках. В хидерах объявляю прототипы функций и переменные с приставкой extern. Для обеспечения видимости переменных и фунций в других сишниках проекта просто делаю #include xxx.h. Все работает. Все кроме переменных enum. Если обьявить такую переменную в сишнике
enum {rsOFF,rsON}rele_stat=rsOFF;
а потом в хидере
extern enum {rsOFF,rsON}rele_stat;

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

Если убрать из хидера символные значения и оставить просто
extern enum rele_stat;
то в других сишниках, если приинклудить туда этот хидер, компилятор не знает что такое rsOFF,rsON

Если кто знает решение проблемы - прошу поделиться... Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BSVi
сообщение Apr 2 2009, 19:58
Сообщение #2


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

Группа: Свой
Сообщений: 76
Регистрация: 18-12-07
Из: Киев
Пользователь №: 33 391



Еще позволю себе добавить, что не RELE, a relay - во-первых мешать транслитерацию (RELE) и английские (OFF) слова - это плохо, во-вторых заглавными буквами обычно обзывают задефайненые константы (ну ладно, это спороный пункт), лично я перечисления и структуры начинаю с подчерка, в-третьих не хорошо сокращать одну букву. В итоге я бы написал так

С - вариант
в хереде
typedef enum { relay_off, relay_on } _relay_state;
в си-файле
_relay_state relay1_state = relay_off;
опять в хидере
extern _relay_state relay1_state;

С++ - вариант
в хереде
enum _relay_state { relay_off, relay_on } ;
в с++ -файле
_relay_state relay1_state = relay_off;
опять в хидере
extern _relay_state relay1_state;


--------------------
http://bsvi.ru/ - блог эмбеддера
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 3 2009, 09:33
Сообщение #3


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(BSVi @ Apr 2 2009, 23:58) *
лично я перечисления и структуры начинаю с подчерка,

Компилятор С может резервировать идентификаторы с подчеркиванием для своих нужд, хотя чаще используется два подчеркивания.
Это замечание примите к сведению.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 4th August 2025 - 14:33
Рейтинг@Mail.ru


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