[an error occurred while processing this directive]
Для чего нужны headers вообще?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Как раз именно для того, иметь возможность разбить программу на отдельные модули. Если Вы объявляете некоторую переменную в одном модуле и хотите сделать ее доступной другим модулям, Вы объявлете ее глобальной:
int ivar; // Глобальная переменная
Сие означает, что компилятор РЕЗЕРВИРУЕТ под эту переменную память и говорит линкеру, что она глобально ОПРЕЛЕЛЕНА.
Далее, чтобы компилятор мог правильно обрабатывать обращения к таким переменным в другом модуле, необходимо сказать компилятору какой у нее тип, размерность и т.д. Для этого используется класс памяти extern. Т.е. в другом модуле, который обращается к данной переменной нужно объявить эту переменную как
extern int ivar; // Глобальная переменная объявлена ВНЕ данного модуля
А это означает, что компилятор уже знает как с этой переменной обращаться, но он уже НЕ ВЫДЕЛЯЕТ память для нее. В свою очередь он также говорит линкеру о том, что имеется ссылка к внешней глобальной переменной.
Объединение всей программы из отдельных модулей выполняется линкером. В ходе компоновки программы линкер определяет физические адреса всех переменных и размещает их в памяти по соответствующим адресам.
Когда модулей, в которых они обращаются к данной глобальной переменной, то чтобы каждый раз не описывать данную переменную, то целесообразно вынести ее описание в заголовочный файл h и этот файл включать во все модули данной программы. Сюда же включаются ПРОТОТИПЫ глобально определенных функций, символические определения констант, типы данных и т.п.
Составить ответ
|||
Конференция
|||
Архив
Ответы
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru