Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: проблема областей видимости в Си
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Androliz
Использую Keil RealView MDK-ARM V3.23
В функции main объявлена структура :
int main(void)
{
struct ButtState buttStates[20];//array of structures[/color]

Далее из main вызывается другая функция pressPreprocess, объявленная в другом файле, подключенном к проекту. Эта функция ипользует структуру buttStates[20].Но компилятор выдаёт ошибку, что не может найти эту переменную: identifyer buttStates is undefined...
Переменная объявленная в main является локальной. Как не делая её голобальной и не передавая ее в функцию(или указатель на неё) решить проблему вызова функции из другого файла, работающей с локальными переменными?
aaarrr
Цитата(Androliz @ Sep 22 2008, 17:14) *
Как не делая её голобальной и не передавая ее в функцию(или указатель на неё) решить проблему вызова функции из другого файла, работающей с локальными переменными?

Никак.
KRS
Цитата(Androliz @ Sep 22 2008, 17:14) *
Как не делая её голобальной и не передавая ее в функцию(или указатель на неё) решить проблему вызова функции из другого файла, работающей с локальными переменными?

Никак!
spf
Цитата(Androliz @ Sep 22 2008, 19:14) *
Далее из main вызывается другая функция pressPreprocess, объявленная в другом файле, подключенном к проекту. Эта функция ипользует структуру buttStates[20].Но компилятор выдаёт ошибку, что не может найти эту переменную: identifyer buttStates is undefined...

И это правильно!

Цитата
Переменная объявленная в main является локальной. Как не делая её голобальной и не передавая ее в функцию(или указатель на неё) решить проблему вызова функции из другого файла, работающей с локальными переменными?

Локальная переменная она на то и локальная, чтобы ее было видно только там, где она объявлена.
Пытаться обходить стандарты Си не стоит, это грабли.
SergeiCh
Цитата(Androliz @ Sep 22 2008, 20:14) *
Как не делая её голобальной и не передавая ее в функцию(или указатель на неё) решить проблему вызова функции из другого файла, работающей с локальными переменными?
AFAIK, никак. В gcc есть nested functions, которые имеют доступ к локальным переменным содержащей функции, но такая (nested) функция должна быть определена в той же функции, чьи переменные собирается использовать, т.е. в этом же файле. Разве что через #include smile.gif Про nested functions в Keil не слышал.
xemul
Цитата(Androliz @ Sep 22 2008, 17:14) *
...
Переменная объявленная в main является локальной. Как не делая её голобальной и не передавая ее в функцию(или указатель на неё) решить проблему вызова функции из другого файла, работающей с локальными переменными?

Объявите глобальный указатель ButtState *p_bs, в main() присвойте ему адрес buttStates[], в более другой функции из другого файла обращайтесь к buttStates[] через этот указатель. Но делать так стОит только при неудержимой склонности к программным перверсиям.
Сергей Борщ
Цитата(Androliz @ Sep 22 2008, 16:14) *
Как не делая её голобальной и не передавая ее в функцию(или указатель на неё) решить проблему
А вы поставьте себя на место компилятора и подумайте - как он может знать, что эту функцию будут вызывать именно из main() и как он сможет догадаться, что в другом файле в main() объявлен какой-то ButtStates. Если вам удастся разрешить эту проблему, вот вам вторая: а что должен будет делать компилятор, если вы вызовете эту функцию из другой, в которой нет локальной переменной ButtStates.
VAI
Цитата
Как не делая её голобальной и не передавая ее в функцию(или указатель на неё) решить проблему вызова функции из другого файла, работающей с локальными переменными?

Извините, а зачем? Может, поняв причину мы сможем что-либо предложить...
Androliz
спасибо за ответ.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.