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

 
 
> Видимость переменных, Проблема с 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
Ответов
_Pasha
сообщение Apr 1 2009, 09:56
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Пал @ Apr 1 2009, 12:32) *
Если кто знает решение проблемы - прошу поделиться...

typedef enum {rsOFF,rsON} MyEnum_t;

extern MyEnum_t rele_stat;
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 2 2009, 06:33
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(_Pasha @ Apr 1 2009, 13:56) *
typedef enum {rsOFF,rsON} MyEnum_t;

extern MyEnum_t rele_stat;

Что за уродство? Какие тайпдефы? Кто вас научил этим глупостям?

Делается все просто: в хедере (а не хидере!) пишешь:
enum RELE_STAT {rsOFF,rsON};

В с-файле:
RELE_STAT rele_stat = rsOFF;

если эта переменная нужна в нескольких с-файлах, то в общем хедере объявляешь ее extern
extern RELE_STAT rele_stat;
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 2 2009, 06:49
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(777777 @ Apr 2 2009, 10:33) *
Что за уродство? Какие тайпдефы? Кто вас научил этим глупостям?

нИкакое не уродство и ничё не глупости.
А если несколько переменных надо определить? для каждого енум забивать чтоли?
Я всегда (почти всегда) так пишу енумы и всегда структуры.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 2 2009, 06:55
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(MrYuran @ Apr 2 2009, 10:49) *
нИкакое не уродство и ничё не глупости.
А если несколько переменных надо определить? для каждого енум забивать чтоли?
Я всегда (почти всегда) так пишу енумы и всегда структуры.

Именно для нескольких так и делают. Реле много, но набор допустимых состояний у всех одинаковый - включено или выключено. Поэтому пишешь:

RELE_STAT rele1;
RELE_STAT rele2;
RELE_STAT rele3;
RELE_STAT rele4;
RELE_STAT rele5 = rsON;

Энумы - они сами могут быть именованными, поэтому нет никакой нужды в тайпдефах.

Сообщение отредактировал 777777 - Apr 2 2009, 06:56
Go to the top of the page
 
+Quote Post



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

 


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


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