Выбор ответа Middle Сборка и линковка обновлено
extern "C"
Вопрос
Зачем объявлять функцию как extern "C" int compute(int);?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Чтобы отключить name mangling и вызывать функцию из C или через dlsym. C++ кодирует в имени символа пространство имён и типы параметров (Z7computei), на этом держится перегрузка.
Варианты ответа
- Чтобы тело функции компилировалось компилятором C, а не компилятором C++
- Чтобы отключить name mangling и вызывать функцию из C или через
dlsymправильный ответ - Чтобы функция была видна только в текущем файле, как при
static - Чтобы запретить исключения в функции, как при пометке
noexcept
Разбор
C++ кодирует в имени символа пространство имён и типы параметров (_Z7computei), на этом держится перегрузка. C-код и dlsym("compute") ищут простое имя. extern "C" задаёт C-связывание: символ будет compute, перегружать такие функции нельзя.
- Тело всё равно компилируется как C++.
- Видимость в файле это
staticили безымянное пространство имён. - Исключения
extern "C"не запрещает (хотя бросать их в C-код нельзя).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.