Типы компоновок

205
09 апреля 2018, 01:14

Какие сущности относятся к внешней компоновки, какие к внутренней, а какие не имеют компоновки вовсе. Во всех учебниках эта тема слишком растянута, а на сайте microsoft не понятно. Хотелось бы что бы было кратко и понятно.

Answer 1

Из стандарта Cpp11 3.5/2

  • When a name has external linkage , the entity it denotes can be referred to by names from scopes of other translation units or from other scopes of the same translation unit.
  • When a name has internal linkage , the entity it denotes can be referred to by names from other scopes in the same translation unit.
  • When a name has no linkage , the entity it denotes cannot be referred to by names from other scopes.

Вольный перевод:

  • Имя сущность, на которую можно сослаться по оному из другой единицы трансляции, имеет внешнюю линковку.
  • Имя сущность, на которую можно сослаться по оному из другой области видимости из той же единицы трансляции, имеет внутреннюю линковку.
  • Имя сущности, на которую нельзя сослаться по оному из другой области видимости, не имеет линковки.

Примеры

Список не полный, если присмотреться, то несколько противоречивый, см. раздел 3.5 стандарта, если интересуют строгие определения.

Внешняя линковка:

  • Глобальные функции и переменные без спецификатора static.
  • Именованные namespase'ы и их члены, если они не подпадают под другие правила.
  • Именованные структуры, классы и перечисления.
  • Шаблоны.

Внутренняя линковка:

  • Глобальные функции и переменные со спецификатором static. (основной способ указания, что идентификатор имеет внутреннюю линковку, унаследован от Си).
  • Константы const и constexpr без extern
  • Безымянные namespase'ы и их члены.

Не имеет линковки:

  • Всё, что объявлено в области видимости блоков без спецификатора extern, включая локальные переменные, типы и функции.
  • Безымянные структуры, классы и перечисления без typedef'ов.
  • Члены таких классов и перечислений.
READ ALSO
Как защитить приложение от дампа с памяти и последующего кряка?

Как защитить приложение от дампа с памяти и последующего кряка?

Как можно защитить приложение от дампа с памяти и последующего кряка? Так какие-нибудь динамические функции и тп

187
поиск файлов в папке с++ без Win API

поиск файлов в папке с++ без Win API

Нужно вывести в переменную String список всех файлов с нужным расширением (скажемmp3)

194
Как сменить цвет для элемента типа chtype из curses

Как сменить цвет для элемента типа chtype из curses

При создании элемента типа chtype задаю цвет:

200
Как узнать тип элементов вектора?

Как узнать тип элементов вектора?

К примеру есть вектор:

223