|
Как принудительно откомпилить переменную, Подскажите? |
|
|
|
Jul 4 2011, 15:02
|

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

|
У меня вот такая проблема.... Объявляю переменную в одном файле, но не использую ее там... и пытаюсь добраться до нее из другого файла... но компилятор выдает ошибку типа "не объявлена переменная..." - посоветуйте что можно сделать... PS. обявление переменной и использование ее должно быть точно так как указано выше..!!! да .. и фиктивно использовать ее в файле где она объявлена нет необходимости и не хочется (хотя это и помогает)?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Jul 5 2011, 06:17
|

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

|
Чтобы переменная была видна из другого модуля, там (в другом модуле) она должна быть объявлена с квалификатором extern. Тогда компилятор не обращает на неё внимания, зная, что она размещена где-то в другом месте. Другими словами: В module.с определяете переменную, а в module.h повторяете определение, но с extern. Во внешнем модуле подключаете #include module.h Насчёт букварей всё правильно, зря обижаетесь. Цитата(Lexy_one @ Jul 4 2011, 19:02)  да .. и фиктивно использовать ее в файле где она объявлена нет необходимости и не хочется (хотя это и помогает)?  это как? Поясните. И ошибку покажите конкретно, а не "типа не объявлена". variable not defined или всё-таки undefined reference?
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jul 5 2011, 08:16
|

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

|
QUOTE (Lexy_one @ Jul 5 2011, 09:09)  Я конечно извиняюсь... но зачем так жестко.... .. неужели у вас не было не каких проблемм... Нет. Я просто сначала прочитал букварь, а потом начал писать. После чего еще неоднократно перечитывал. Причем читал именно учебник K&R, а не настенные календари с готовыми рецептами для "обучения профессиональному программированию на Си за 21 день в картинках" QUOTE и ни кто вам ни чего не подсказывал... Никто  , тяжелое детство, отсутствие интернета, тоталитарный режим  .... Только K&R, документация к компилятору и чуть позже тоже бумажный стандарт СЭВ языка Cи. QUOTE PS.. а на счет области видимости... пробовал.. и если бы помоголо, то как на ваш взгляд? задавал бы я етот вопрос или нет ......????? Можете методом тыка и дальше подбирать буквы - нельзя сказать, что не сможете угадать. Но лучше понять и сделать. На данный момент Вы не смогли даже описать сколь-нибудь понятным языком, как Вы себе представляли решение и что делали. Нет даже предмета для обсуждения. Посему читать букварь, как минимум до состояния, когда сможете описать "проблему" на общепринятом языке. Ключевые слова на которые следует обратить внимание были названы.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 5 2011, 09:47
|

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

|
QUOTE (Lexy_one @ Jul 5 2011, 12:28)  а справочники типа "Си за 21 день в картинках" принципиально не читаю...! ээээээ беру свои слова обратно - Вам можно читать, по крайней мере узнали-бы слово "структура", а то полный мрак  . Для анального использования анально объявленной переменной Вам следует добавить квалификатор __root. Что это такое - читать документацию на компилятор. P.S. QUOTE Выдает ошыбку: Эту ошибку выдает Линкер, а не компилятор - надо-бы уяснить разницу между ними.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 5 2011, 10:21
|

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

|
А компилятор какой? IAR? Вот наткнулся тут немного, у вас случайно Misra C не включено? А то есть интересный документВ частности, там рекомендуется использовать #pragma location = addr вместо @addr
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jul 5 2011, 11:29
|

Гуру
     
Группа: Свой
Сообщений: 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 вообще надо больно стучать по голове, и отдельно за lo kation тех, кто утверждает, что читает "The Dictionary of Standard C" в подлиннике  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 5 2011, 12:44
|

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

|
В принципе на счет структуры согласен возможно будет попроще....  Просто на этапе начала разработки показалось проще сделать так как есть. lokation - ДА ЛОХАНУЛСЯ с кем не бывает.. а дальше ctrl+c ... ctrl+v вот и наплодилось...
Сообщение отредактировал Lexy_one - Jul 5 2011, 12:57
|
|
|
|
|
Jul 7 2011, 11:15
|

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

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