Jump to content

Связь (программное обеспечение)

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

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

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

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

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

Связь в C

[ редактировать ]

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

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

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

/* file demo1.c */  /* extern */ void foo(void); /* extern optional - it's the default */  int main(void){  foo();  return 0;  }
  /* file demo2.c */  void foo(void){  ...}

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

См. также

[ редактировать ]
  1. ^ ИСО/МЭК 9899 . Официальные документы C99, включая технические исправления и обоснование. По состоянию на 2007 год последней версией стандарта является «ISO/IEC 9899:TC3» (PDF) .   (3,61 МБ )
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 953b829379fca5b7c8c00e6576913ceb__1631641260
URL1:https://arc.ask3.ru/arc/aa/95/eb/953b829379fca5b7c8c00e6576913ceb.html
Заголовок, (Title) документа по адресу, URL1:
Linkage (software) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)