Ниже приведена простая программа на языке С, состоящая из двух файлов (модулей) - first.с (главный файл) и second.с:
// начало первого файла first.с
#include <stdio.h>// подключение библиотеки stdio.h
extern int a, b;// объявление переменных объявленных в
// другом файле (в файле second.с)
void main(void)// основная функция main
{
printf( "a = %d b = %d\n", a, b ); // вывод значений переменных a,b
}
Во втором файле second.с должно присутствовать объявление и инициализация переменных, например, в виде:
int a = 2, b = 5; // объявление переменных a,b
Две глобальные переменные а и b типа int описаны вне функции в файле second.с. Следовательно, их имена являются глобальными в файле, т.е. они видимы для загрузчика языка С. Поскольку в файле first.с присутствует описание extern для этих переменных типа int, то компилятор разрешает использовать их в функциях first.с, например в main().
Объявление extern int а,b можно поместить как внутри, так и вне функций (например функции main() ). При объявлении вне функции переменные а и b будут видимы во всем модуле first.с. Если оператор extern int a,b помещен внутри функции main(), то переменные будут видимы только внутри этой функции.
Если перед описанием int а=2, b=5 в файле second.c поместить обозначение класса памяти static, то указанные переменные скрываются от загрузчика. Такие переменные известны только в пределах файла, в котором они объявлены. Хотя программа в файле first.с будет успешно оттранслирована (компилятор учтет описание extern), загрузчик не сможет уточнить адреса для внешних ссылок и выдаст соответствующее сообщение об ошибке.
Св. план 1999, поз. 93
Учебное издание
Авторы: Бахирев Андрей Владимирович,
Живицкая Елена Николаевна,
Комличенко Виталий Николаевич,
Соколов Сергей Александрович,
Синицын Александр Григорьевич.
МЕТОДИЧЕСКОЕ ПОСОБИЕ
И УЧЕБНЫЕ МАТЕРИАЛЫ
по курсу
«Основы информатики и вычислительной техники»
для студентов экономических специальностей
заочной формы обучения
в 2-х частях
Часть 1
Редактор Е.Н. Батурчик
Подписано в печать Формат 60х84 1/16.
Бумага Печать офсетная. Усл. печ. л.
Уч.-изд. л. 4,6. Тираж 120 экз. Заказ
Белорусский государственный университет информатики и радиоэлектроники
Отпечатано в БГУИР. Лицензия ЛП №156. 220027, Минск, П. Бровки, 6