Internal linkage (внутренняя линковка) - это свойство сущностей в C/C++, которое ограничивает их видимость текущей единицей трансляции (translation unit). Это ключевое понятие для понимания работы компоновщика (linker).
Видимость только в пределах одной единицы трансляции
Поведение при линковке
// 1. Статические глобальные переменные
static int internalVar = 42;
// 2. Статические функции
static void internalFunc() {}
// 3. Константы (в C++ по умолчанию)
const int CONSTANT = 100;
// 4. Анонимные namespace (C++)
namespace {
int hiddenVar = 10;
}
// file1.cpp
static int counter = 0; // internal linkage
int publicCounter = 0; // external linkage
// file2.cpp
extern int publicCounter; // OK
extern int counter; // Ошибка линковки!
Особенность | C | C++ |
---|---|---|
Константы | external linkage | internal linkage |
Статические функции | поддерживаются | поддерживаются |
Анонимные пространства | нет | есть |
extern
объявление в другом файлеnm --demangle object_file.o
Резюмируем: internal linkage - это механизм ограничения видимости сущностей одной единицей трансляции, важный для инкапсуляции кода и предотвращения конфликтов имен. В C++ для этого чаще используют анонимные namespace, в C - static ключевое слово.