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

 
 
> Как принудительно откомпилить переменную, Подскажите?
Lexy_one
сообщение Jul 4 2011, 15:02
Сообщение #1


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

Группа: Участник
Сообщений: 90
Регистрация: 28-07-09
Из: Чернигов
Пользователь №: 51 621



У меня вот такая проблема.... Объявляю переменную в одном файле, но не использую ее там... и пытаюсь добраться до нее из другого файла... но компилятор выдает ошибку типа "не объявлена переменная..." - посоветуйте что можно сделать...

PS. обявление переменной и использование ее должно быть точно так как указано выше..!!!
да .. и фиктивно использовать ее в файле где она объявлена нет необходимости и не хочется (хотя это и помогает)? sm.gif
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
zltigo
сообщение Jul 4 2011, 15:09
Сообщение #2


Гуру
******

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



1) прочитать любой букварь. Области видимости переменных, static, extern, const, volatile....Сие есть основа основ.
2) если вдруг! непонятно, то спросить в разделе для начинающих программировать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Lexy_one
сообщение Jul 5 2011, 06:09
Сообщение #3


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

Группа: Участник
Сообщений: 90
Регистрация: 28-07-09
Из: Чернигов
Пользователь №: 51 621



Я конечно извиняюсь... но зачем так жестко.... .. неужели у вас не было не каких проблемм... и ни кто вам ни чего не подсказывал... а вы так сразу "Мы такие крутые!!! А вы ни чего не ШАРИТЕ"
PS.. а на счет области видимости... пробовал.. и если бы помоголо, то как на ваш взгляд? задавал бы я етот вопрос или нет ......?????

Сообщение отредактировал Lexy_one - Jul 5 2011, 06:11
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 5 2011, 06:17
Сообщение #4


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

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



Чтобы переменная была видна из другого модуля, там (в другом модуле) она должна быть объявлена с квалификатором extern.
Тогда компилятор не обращает на неё внимания, зная, что она размещена где-то в другом месте.
Другими словами:
В module.с определяете переменную, а в module.h повторяете определение, но с extern.
Во внешнем модуле подключаете #include module.h
Насчёт букварей всё правильно, зря обижаетесь.
Цитата(Lexy_one @ Jul 4 2011, 19:02) *
да .. и фиктивно использовать ее в файле где она объявлена нет необходимости и не хочется (хотя это и помогает)? sm.gif

это как? Поясните.
И ошибку покажите конкретно, а не "типа не объявлена".
variable not defined или всё-таки undefined reference?


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


Гуру
******

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



QUOTE (Lexy_one @ Jul 5 2011, 09:09) *
Я конечно извиняюсь... но зачем так жестко.... .. неужели у вас не было не каких проблемм...

Нет. Я просто сначала прочитал букварь, а потом начал писать. После чего еще неоднократно перечитывал. Причем читал именно учебник K&R, а не настенные календари с готовыми рецептами для "обучения профессиональному программированию на Си за 21 день в картинках"
QUOTE
и ни кто вам ни чего не подсказывал...

Никто sad.gif, тяжелое детство, отсутствие интернета, тоталитарный режим sm.gif .... Только K&R, документация к компилятору и чуть позже тоже бумажный стандарт СЭВ языка Cи.
QUOTE
PS.. а на счет области видимости... пробовал.. и если бы помоголо, то как на ваш взгляд? задавал бы я етот вопрос или нет ......?????

Можете методом тыка и дальше подбирать буквы - нельзя сказать, что не сможете угадать. Но лучше понять и сделать. На данный момент Вы не смогли даже описать сколь-нибудь понятным языком, как Вы себе представляли решение и что делали. Нет даже предмета для обсуждения. Посему читать букварь, как минимум до состояния, когда сможете описать "проблему" на общепринятом языке. Ключевые слова на которые следует обратить внимание были названы.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Lexy_one
сообщение Jul 5 2011, 09:28
Сообщение #6


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

Группа: Участник
Сообщений: 90
Регистрация: 28-07-09
Из: Чернигов
Пользователь №: 51 621



объясняю конкретней:

файл 1 с обявлением переменной:
.....
#define _L12_var_lokation_BAT_RAM _L11_var_lokation_BAT_RAM + _Int32U

__no_init Int32U ScArtLoadLastInstAmount @ _L12_var_lokation_BAT_RAM;

#define _L13_var_lokation_BAT_RAM _L12_var_lokation_BAT_RAM + _Int32U
.....

файл 2 с использованием переменной переменной:

.....
extern Int32U ScArtLoadLastInstAmount;
...
void funct_0(void)
{
...
ScArtLoadLastInstAmount = 0;
...
}
...
.....

Выдает ошыбку:
Error[Li005]: no definition for "ScArtLoadLastInstAmount" [referenced from D:\_WORK\...\Debug\Obj\base_....o]

.....................................................................

На счет использования:
если в файле 1 написать строку с использованием этой переменной
(например ScArtLoadLastInstAmount = 0;)
то ошибки не возникает!

P.S.
По поводу букварей: Читал много чего например Rex Jaeschke "The Dictionary of Standard C" - кстати очень хороший справочник... а справочники типа "Си за 21 день в картинках" принципиально не читаю...!

Сообщение отредактировал Lexy_one - Jul 5 2011, 09:29
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 5 2011, 09:47
Сообщение #7


Гуру
******

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



QUOTE (Lexy_one @ Jul 5 2011, 12:28) *
а справочники типа "Си за 21 день в картинках" принципиально не читаю...!

ээээээ беру свои слова обратно - Вам можно читать, по крайней мере узнали-бы слово "структура", а то полный мрак sad.gif.
Для анального использования анально объявленной переменной Вам следует добавить квалификатор __root. Что это такое - читать документацию на компилятор.

P.S.
QUOTE
Выдает ошыбку:

Эту ошибку выдает Линкер, а не компилятор - надо-бы уяснить разницу между ними.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 5 2011, 10:21
Сообщение #8


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

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



А компилятор какой? IAR?
Вот наткнулся тут немного, у вас случайно Misra C не включено?
А то есть интересный документ

В частности, там рекомендуется использовать
#pragma location = addr
вместо @addr


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Lexy_one
сообщение Jul 5 2011, 10:46
Сообщение #9


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

Группа: Участник
Сообщений: 90
Регистрация: 28-07-09
Из: Чернигов
Пользователь №: 51 621



Да компилятор IAR. Misra C не включен.
За файлик спасибо... посмотрю...

На счет переменной: помогло использование атрибута __root.
Спасибо за помощь...

А на счет ана....го использования переменной - не согласен!
поскольку для решения определенных задач иногда необходимы и не рациональные решения!

Сообщение отредактировал Lexy_one - Jul 5 2011, 10:47
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 5 2011, 11:29
Сообщение #10


Гуру
******

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



QUOTE (Lexy_one @ Jul 5 2011, 13:46) *
А на счет ана....го использования переменной - не согласен!
поскольку для решения определенных задач иногда необходимы и не рациональные решения!

Разумеется нет, так и в Вашем случае следовало четко, ясно, коротко, без всяких
QUOTE
#define _L12_var_lokation_BAT_RAM _L11_var_lokation_BAT_RAM + _Int32U

__no_init Int32U ScArtLoadLastInstAmount @ _L12_var_lokation_BAT_RAM;

#define _L13_var_lokation_BAT_RAM _L12_var_lokation_BAT_RAM + _Int32U
.....

описать структуру данных лежащих в батарейной памяти. При этом не пришлось-бы иметь отдельных разрозненных переменных которые компилятор оптимизировал, могли-бы обойтись только одним фиксированным адресом и что еще правильнее, не использовать задание фиксированных адресов в исходном тексте возложив это на линкер, или что еще проще проинициализировав только указатель на структуру. Причем в последнем случае получили совершенно переносимый и компиляторо-линкеронезависимый исходник. За использование имен типа _L13_var_lokation_BAT_RAM _L12_var_lokation_BAT_RAM + _Int32U вообще надо больно стучать по голове, и отдельно за lokation тех, кто утверждает, что читает "The Dictionary of Standard C" в подлиннике sm.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Lexy_one
сообщение Jul 5 2011, 12:44
Сообщение #11


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

Группа: Участник
Сообщений: 90
Регистрация: 28-07-09
Из: Чернигов
Пользователь №: 51 621



В принципе на счет структуры согласен возможно будет попроще.... sm.gif
Просто на этапе начала разработки показалось проще сделать так как есть.

lokation - ДА ЛОХАНУЛСЯ с кем не бывает.. а дальше ctrl+c ... ctrl+v вот и наплодилось...

Сообщение отредактировал Lexy_one - Jul 5 2011, 12:57
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 5 2011, 14:08
Сообщение #12


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



lokation - вполне себе нормальное слово, если на датском sm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 6 2011, 05:59
Сообщение #13


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(Lexy_one @ Jul 5 2011, 16:44) *
lokation - ДА ЛОХАНУЛСЯ с кем не бывает.. а дальше ctrl+c ... ctrl+v вот и наплодилось...


Как же надо не любить себя самого, чтобы придумывать такие длиннющие имена и волохать их через всю программу.
Go to the top of the page
 
+Quote Post
Lexy_one
сообщение Jul 7 2011, 11:15
Сообщение #14


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

Группа: Участник
Сообщений: 90
Регистрация: 28-07-09
Из: Чернигов
Пользователь №: 51 621



Цитата(sergeeff @ Jul 6 2011, 08:59) *
Как же надо не любить себя самого, чтобы придумывать такие длиннющие имена и волохать их через всю программу.


Это не имена... это разметка памяти... и ни кто их через всю программу не тащит!
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Jul 9 2011, 03:28
Сообщение #15


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(Lexy_one @ Jul 5 2011, 02:09) *
неужели у вас не было не каких проблемм...

У него сейчас проблемы sm.gif
Go to the top of the page
 
+Quote Post

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

 


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


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