extern "C" - это ключевое слово для объявления функции с привязками C, потому что компилятор C и компилятор C ++ будут переводить исходный код в объектный файл в другую форму:
Например, фрагмент кода выглядит следующим образом:
int _cdecl func1(void) {return 0}
int _stdcall func2(int) {return 0}
int _fastcall func3(void) {return 1}
32-битные C-компиляторы переведут код в следующую форму:
_func1
_func2@4
@func3@4
в cdecl, func1 будет переводиться как ' _name '
в stdcall, func2 будет переводиться как ' _name @ X '
в fastcall func2 будет переводиться как ' @ name @ X '
' X ' означает количество байтов параметров в списке параметров.
64-битное соглашение в Windows не имеет начального подчеркивания
В C ++ введены классы, шаблоны, пространства имен и перегрузка операторов, поскольку не допускается две функции с одинаковым именем, компилятор C ++ предоставляет информацию о типе в имени символа,
например, фрагмент кода выглядит следующим образом:
int func(void) {return 1;}
int func(int) {return 0;}
int func_call(void) {int m=func(), n=func(0);}
Компилятор C ++ переведет код следующим образом:
int func_v(void) {return 1;}
int func_i(int) {return 0;}
int func_call(void) {int m=_func_v(), n=_func_i(0);}
'_ v' и '_i' представляют собой информацию о типах 'void' и 'int'