Одно место, где ехЬегп «C» имеет смысл, когда вы связываете с библиотекой, которая была скомпилирована как код C.
extern "C" {
#include "c_only_header.h"
}
В противном случае, вы можете получить ошибки компоновщика, так как библиотека содержит функции с С-связью (_myfunc), но компилятором C++, который обработанном заголовок библиотеки как код C++, генерируются C++ символьных имен для функций (» _myfunc @ XAZZYE "- это называется mangling и отличается для каждого компилятора).
Другое место, где используется extern «C», является гарантией связи C даже для функций, написанных на C++, например.
extern "C" void __stdcall PrintHello() {
cout << "Hello World" << endl;
}
Такая функция может быть экспортирована в DLL, а затем будет вызывать из других языков программирования, поскольку при компиляции не будет искажать его имя. Если вы добавили другую перегрузку одной и той же функции, например.
extern "C" void __stdcall PrintHello() {
cout << "Hello World" << endl;
}
extern "C" void __stdcall PrintHello(const char *name) {
cout << "Hello, " << name << endl;
}
Большинство компиляторов затем поймают это и, таким образом, предотвратят использование функциональных перегрузок в ваших публичных функциях DLL.
Дубликат http://stackoverflow.com/questions/67894/why-do-we-need-extern-c-include-foo-h-in-c – Aamir
related: http://stackoverflow.com/questions/1041866/extern-c http://stackoverflow.com/questions/717729/does-extern-c-have-any-effect-in-c http://stackoverflow.com/questions/496448/how-to-correctly -use-The-ехЬегп-keword-в-с / –