Связь (программное обеспечение)
В языках программирования, особенно в компилируемых, таких как 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
. Это пример внешней связи для функции.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ ИСО/МЭК 9899 . Официальные документы C99, включая технические исправления и обоснование. По состоянию на 2007 год последней версией стандарта является «ISO/IEC 9899:TC3» (PDF) . (3,61 МБ )