Объявление extern "C" отключает name mangling в C++ для функции func, позволяя ей линковаться с кодом, скомпилированным C-компилятором.
C++-компиляторы кодируют имена функций (этот процесс называется name mangling), чтобы поддерживать такие возможности как перегрузка функций и типобезопасная линковка. Например, func может внутри превратиться в _Z4funcPiN3FooE.
C-компиляторы не делают name mangling, поэтому они не могут найти манглированные C++-имена функций при линковке.
Если ты объявишь:
extern "C" int func(int *, Foo);
Ты даёшь указание C++-компилятору:
func вместо манглированного имениКомпилятор всё равно будет проверять C++-типы параметров (таких как int * и Foo). Объявление extern "C" влияет только на то, как имя функции выглядит в скомпилированном бинарнике, а не на саму реализацию функции или проверку параметров.
Объявление extern "C" предотвращает манглирование имени функции компилятором C++, позволяя ей линковаться с объектными файлами C, которые ожидают немангленный символ.
Новый — ещё не проверен сообществом
Вы