1 / Идентификатор, объявленный в разных областях или в одной и той же области более одного раза, может быть
сделано для ссылки на тот же объект или функцию с помощью процесса, называемого связью. Есть
три вида связи: внешняя, внутренняя и нет.
2 / В наборе единиц перевода и библиотек, составляющих целую программу, каждое объявление определенного идентификатора с внешней связью обозначает один и тот же объект или функцию. В пределах одной единицы перевода каждое объявление идентификатора с внутренней связью обозначает один и тот же объект или функцию. Каждое объявление идентификатора без привязки обозначает уникальный объект.
3 / Если объявление идентификатора области файла для объекта или функции содержит статический спецификатор класса хранения, идентификатор имеет внутреннюю связь.
4 / Для идентификатора, объявленного с помощью спецификатора класса хранения extern в области видимости, в которой видно предыдущее объявление этого идентификатора, если в предыдущем объявлении указана внутренняя или внешняя связь, связь идентификатора в последующем объявлении такой же, как связь, указанная в предыдущей декларации. Если никакое предыдущее объявление не видно или если в предыдущем объявлении не указана связь, то идентификатор имеет внешнюю связь.
5 / Если объявление идентификатора для функции не имеет спецификатора класса хранения, его связь определяется точно так, как если бы он был объявлен с помощью спецификатора класса хранения extern. Если объявление идентификатора для объекта имеет область действия файла и не имеет спецификатора класса хранения, его связь является внешней.
6 / Следующие идентификаторы не имеют связи: идентификатор, объявленный как что-либо, кроме объекта или функции; идентификатор, объявленный как параметр функции; идентификатор области блока для объекта, объявленного без спецификатора класса хранения extern.
7 / Если внутри единицы перевода появляется один и тот же идентификатор с внутренней и внешней связью, поведение не определено.