Видоизменение имен функциий

108
09 марта 2018, 15:14

Для чего компиляторы C++ "манглят" имена функций.

Answer 1

Смотрите, компиляторы C++ унаследовали линкер из C.

В C-шном линкере имя функции напрямую отображалось на имя объекта. Это работало, поскольку в C нет перегруженных функций.

Но в C++ перегрузки функций есть (а также пространства имён и классы), и функции

int f(int x) { ... }

и

int f(int x, int y) { ... }

получили бы одинаковое имя! А компоновщик такую ситуацию обрабатывать не умел, для него все имена должны были быть уникальны. Для того, чтобы написанные выше две функции смогли скомпоноваться, и чтобы и не менять логику компоновщика, придумали простой выход: кодировать сигнатуру функции, то есть, типы параметров (а также имя класса и пространство имён), в имени, передавать компоновщику дополненное имя.

В принципе, такое видоизменение имён не является обязательным, и не требуется стандартом. Тем не менее, это популярная техника реализации взаимодействия компилятора и компоновщика, которая применяется как в стандарте POSIX, так и в Windows ABI.

READ ALSO
Явная загрузка DLL

Явная загрузка DLL

В связи с сложностями которые возникают в связи с импортом классов при явном подключении DLL (с помощью winapi), стоит ли его использовать, есть...

105
Проверка что в числе нет посторяющихся цифр

Проверка что в числе нет посторяющихся цифр

Есть задачка, найти сколько чисел до 1000 в которых не повторяются цифрыПытаюсь решить простым перебором, каждого числа в стринг и далее проверяю...

146
День недели и месяц с заглавной в SimpleDateFormat

День недели и месяц с заглавной в SimpleDateFormat

Для вывода даты используя формат в таком виде:

166
Сравнение картинок на сходство

Сравнение картинок на сходство

Как сравнить картинку 1 и картинку 2 ?

309