Как следует из названия, C++ и C используют тот же самый вид компоновщика в процессе компоновки? Кроме того, для компиляторов C++ и C компилятор C++ построен на компиляторе C?У C++ и C используется такой же компоновщик?
2
A
ответ
6
Оба варианта использования используют тот же компоновщик. Однако C++ должен кодировать имена и типы связанных вещей, чтобы поддерживать перегрузку функций, чтобы они не могли быть связаны с неправильной функцией. Таким образом, если у вас есть две функции C++, как это:
void func(int);
void func(int, double);
, то компилятор C++ будет генерировать имена для этих функций что-то вроде func_int
и func_int_double
. Точно, какие имена генерируются, специфичен для компилятора и не указан стандартом C++. Поскольку C не поддерживает перегрузку, такой механизм не требуется в C, но вам нужно отключить это так называемое переключение имен, если вы хотите связать код C++ с C, что и делает конструкция extern "C"
.
Ссылка не является частью процесса компиляции вообще. Связывание - это совершенно другой процесс, и это происходит после завершения компиляции. Если компилятор C++ был построен поверх компилятора C или если он был построен с нуля, это зависит от того, какой компилятор мы говорим. Многие из них являются закрытыми, поэтому у нас нет прямого способа узнать. Кроме того, это не вопрос C++ или C. –
Что касается набора компиляторов gnu: да, gcc и g ++ используют один и тот же компоновщик: ld – Ctx
@ VadaPoche Почему это не вопрос C++ или C? Речь идет не о коде, а не о компиляции, но без привязки большинства кодов и большинство компиляции бесполезно. Imho теги полностью актуальны здесь – user463035818