Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В языках программирования, особенно в скомпилированных, таких как C , C ++ и D , связывание описывает, как имена могут или не могут относиться к одному и тому же объекту во всей программе или к одной единице перевода .

staticКлючевое слово используется в C , чтобы ограничить видимость функции или переменной ее ЕП. Это также верно в C ++. (C ++ 98/03 отказался от этого использования в пользу анонимных пространств имен , но больше не считается устаревшим в C ++ 11.) Кроме того, C ++ неявно рассматривает любую constпеременную области пространства имен как имеющую внутреннюю связь, если она явно не объявлена extern, в отличие от C.

Связывание имени связано с его областью , но отличается от нее . Объем имени - это часть единицы перевода, на которой оно отображается. Например, имя с глобальной областью видимости (которая совпадает с областью видимости файла в C и такой же, как глобальная область пространства имен в C ++) отображается в любой части файла. Его область действия будет заканчиваться в конце единицы перевода, независимо от того, была ли этому имени дана внешняя или внутренняя связь.

Если имя имеет внешнюю связь, на объект, который обозначает имя, можно ссылаться из другой единицы перевода, используя отдельное объявление для того же имени, и из других областей в той же единице перевода, используя отдельные объявления. Если бы имя было задано внутренней связью, такое объявление обозначало бы отдельную сущность, хотя и использовало то же имя, но на ее сущность можно было бы ссылаться с помощью отдельных объявлений в одной и той же единице перевода. На имя, которое вообще не имеет связи, нельзя ссылаться из объявлений в разных областях, даже из одной и той же единицы перевода. Примеры таких имен - параметры функций и локальные переменные. Детали различаются между C (где связаны только объекты и функции, но не типы) и C ++, а также между этим упрощенным обзором.

Связь между языками должна выполняться с некоторой осторожностью, поскольку разные языки по-разному украшают свои внешние символы. Распространенная идиома используется extern "C"для связывания кода C ++ и C.

Связь в C [ править ]

Определение «связи» из ISO / IEC 9899: TC3 (стандарт C99). C использует термин «идентификатор», где в этой статье используется «имя» (последнее из которых используется в C ++ для формализации связи):

Идентификатор, объявленный в разных областях или в одной области более одного раза, можно сделать так, чтобы он ссылался на один и тот же объект или функцию с помощью процесса, называемого связыванием. [1]

Ниже приводится типичный пример связи:

/ * файл demo1.c * / / * extern * /  void  foo ( void );  / * extern необязательно - по умолчанию * / int  main ( недействительно ) {  foo ();  возврат  0 ;  }
 / * файл demo2.c * / void  foo ( недействительно ) {  ... }

Функция fooобъявлена ​​в двух файлах, а ее тело определено в demo2.c . Через связь, fooназывается в main()внутри demo1.c относится к fooв demo2.c . Это пример внешней связи для функции.

См. Также [ править ]

Ссылки [ править ]

  1. ^ ISO / IEC 9899 . Официальные документы C99, включая технические исправления и обоснование. По состоянию на 2007 год последней версией стандарта является «ISO / IEC 9899: TC3» (PDF) . (3,61  МБ )