[an error occurred while processing this directive]
Для чего нужны headers вообще?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Bill 19 февраля 2005 г. 08:24
В ответ на: Объявил ее в основном файле, и все стало на места. Спасибо. отправлено Сапожник 19 февраля 2005 г. 03:25

Как раз именно для того, иметь возможность разбить программу на отдельные модули. Если Вы объявляете некоторую переменную в одном модуле и хотите сделать ее доступной другим модулям, Вы объявлете ее глобальной:


int ivar; // Глобальная переменная

Сие означает, что компилятор РЕЗЕРВИРУЕТ под эту переменную память и говорит линкеру, что она глобально ОПРЕЛЕЛЕНА.
Далее, чтобы компилятор мог правильно обрабатывать обращения к таким переменным в другом модуле, необходимо сказать компилятору какой у нее тип, размерность и т.д. Для этого используется класс памяти extern. Т.е. в другом модуле, который обращается к данной переменной нужно объявить эту переменную как

extern int ivar; // Глобальная переменная объявлена ВНЕ данного модуля

А это означает, что компилятор уже знает как с этой переменной обращаться, но он уже НЕ ВЫДЕЛЯЕТ память для нее. В свою очередь он также говорит линкеру о том, что имеется ссылка к внешней глобальной переменной.
Объединение всей программы из отдельных модулей выполняется линкером. В ходе компоновки программы линкер определяет физические адреса всех переменных и размещает их в памяти по соответствующим адресам.
Когда модулей, в которых они обращаются к данной глобальной переменной, то чтобы каждый раз не описывать данную переменную, то целесообразно вынести ее описание в заголовочный файл h и этот файл включать во все модули данной программы. Сюда же включаются ПРОТОТИПЫ глобально определенных функций, символические определения констант, типы данных и т.п.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru