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

 
 
> Видимость переменных, Проблема с 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
XVR
сообщение Apr 2 2009, 06:59
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



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

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

В с-файле:
RELE_STAT rele_stat = rsOFF;
И получаете по полной программе:
Код
enum RELE_STAT {rsOFF,rsON};
RELE_STAT rele_stat = rsOFF;

Цитата
C:\!>cl -c t.c
Microsoft ® 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright © Microsoft Corp 1984-1998. All rights reserved.

t.c
t.c(2) : error C2061: syntax error : identifier 'rele_stat'
t.c(2) : error C2059: syntax error : ';'
t.c(2) : error C2513: '/*global*/ ' : no variable declared before '='

Цитата
[rakhvato@msteplxl7 pts]$ gcc -c ~/t.c
/nfs/ims/home/rakhvato/t.c:2: error: syntax error before "rele_stat"
/nfs/ims/home/rakhvato/t.c:2: warning: data definition has no type or storage class

На других С компиляторах можете попробовать сами
Go to the top of the page
 
+Quote Post



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

 


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


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