2017-02-19 24 views
2

Как следует из названия, C++ и C используют тот же самый вид компоновщика в процессе компоновки? Кроме того, для компиляторов C++ и C компилятор C++ построен на компиляторе C?У C++ и C используется такой же компоновщик?

+0

Ссылка не является частью процесса компиляции вообще. Связывание - это совершенно другой процесс, и это происходит после завершения компиляции. Если компилятор C++ был построен поверх компилятора C или если он был построен с нуля, это зависит от того, какой компилятор мы говорим. Многие из них являются закрытыми, поэтому у нас нет прямого способа узнать. Кроме того, это не вопрос C++ или C. –

+2

Что касается набора компиляторов gnu: да, gcc и g ++ используют один и тот же компоновщик: ld – Ctx

+0

@ VadaPoche Почему это не вопрос C++ или C? Речь идет не о коде, а не о компиляции, но без привязки большинства кодов и большинство компиляции бесполезно. Imho теги полностью актуальны здесь – user463035818

ответ

6

Оба варианта использования используют тот же компоновщик. Однако C++ должен кодировать имена и типы связанных вещей, чтобы поддерживать перегрузку функций, чтобы они не могли быть связаны с неправильной функцией. Таким образом, если у вас есть две функции C++, как это:

void func(int); 
void func(int, double); 

, то компилятор C++ будет генерировать имена для этих функций что-то вроде func_int и func_int_double. Точно, какие имена генерируются, специфичен для компилятора и не указан стандартом C++. Поскольку C не поддерживает перегрузку, такой механизм не требуется в C, но вам нужно отключить это так называемое переключение имен, если вы хотите связать код C++ с C, что и делает конструкция extern "C".

 Смежные вопросы

  • Нет связанных вопросов^_^