Un lugar donde extern "C" tiene sentido es cuando se va a asociar a una biblioteca que fue compilado como código C.
extern "C" {
#include "c_only_header.h"
}
De lo contrario, podría obtener errores de enlace debido a que la biblioteca contiene las funciones con C-vinculación (_myfunc), pero el compilador de C++, que procesa la cabecera de la biblioteca como código C++, generado C++ nombres de símbolos para las funciones (" _myfunc @ XAZZYE "- esto se denomina manipulación y diferente para cada compilador).
Otro lugar donde se usa el extern "C" es para garantizar la vinculación C incluso para las funciones escritas en C++, por ejemplo.
extern "C" void __stdcall PrintHello() {
cout << "Hello World" << endl;
}
Tal función se puede exportar a un archivo DLL y será entonces puede llamar desde otro lenguaje de programación debido a que la compilación no va a destrozar su nombre. Si agregó otra sobrecarga de la misma función, p. Ej.
extern "C" void __stdcall PrintHello() {
cout << "Hello World" << endl;
}
extern "C" void __stdcall PrintHello(const char *name) {
cout << "Hello, " << name << endl;
}
La mayoría de los compiladores lo detectarían y, por lo tanto, evitarían el uso de sobrecargas de función en las funciones de DLL-público.
Duplicado de http://stackoverflow.com/questions/67894/why-do-we-need-extern-c-include-foo-h-in-c – Aamir
relacionado: 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-extern-keword-in-c / –