Область действия внешних идентификаторов
Если функция ссылается на идентификатор, описанный как extern, то где-то среди файлов или библиотек, образующих полную программу, должно содержаться внешнее определение этого идентификатора. Все функции данной программы, которые ссылаются на один и тот же внешний идентификатор, ссылаются на один и тот же объект, так что следует позаботиться, чтобы специфицированные в этом определении тип и размер были совместимы с типом и размером, указываемыми в каждой функции, которая ссылается на эти данные.
Появление ключевого слова extern во внешнем определении указывает на то, что память для описанных в нем идентификаторов будет выделена в другом файле. Следовательно, в состоящей из многих файлов программе внешнее определение идентификатора, не содержащее спецификатора extern, должно появляться ровно в одном из этих файлов. любые другие файлы, которые желают дать внешнее определение этого идентификатора, должны включать в это определение слово extern. Идентификатор может быть инициализирован только в том описании, которое приводит к выделению памяти.
Идентификаторы, внешнее определение которых начинается со слова static, недоступны из других файлов. функции могут быть описаны как static.