Подтвердить что ты не робот

Что именно я теряю при использовании extern "C" в С++?

Я пытаюсь создать динамическую библиотеку на С++, которую вызывается существующей программой, написанной в IDL (Interactive Data Language). Я знаю, что мне нужно использовать extern "C", чтобы отключить манипулирование именами, чтобы IDL мог вызывать нужные ему функции (остальная часть механизма вызова довольно проста).

Тем не менее, я всегда не решаюсь использовать функции языка, который я не совсем понимаю, поэтому мой вопрос таков: какие функции С++ я теряю, возвращаясь к C-ссылке, если таковая имеется? Пространства имен были бы очевидными, я думаю, но полностью ли он отключает все другие приятные функции С++? Могу ли я использовать С++ STL и все различные функции языка (особенно С++ 11), на которые я пришел, чтобы полагаться? Или я застрял по существу в C?

4b9b3361

Ответ 1

Единственное, что выпадает, - это name mangling видимых извне имен. Функция перегрузки по типам параметров, а также по количеству параметров перестает работать в качестве результата. По сути, разрешение имен во время фазы связывания возвращается к обычным старым режимам C (то есть одному имени - одной записи).

Что касается внутренних компонентов вашей реализации, вы можете продолжить использовать стандартную библиотеку и все другие приятные функции С++ 11. Только имена внешних видимых объектов изменяются на extern C.