Un luogo dove extern "C" ha senso è quando si sta collegando a una libreria che è stato compilato come codice C.
extern "C" {
#include "c_only_header.h"
}
In caso contrario, si potrebbe ottenere errori del linker perché la libreria contiene le funzioni con C-linkage (_myfunc), ma il compilatore C++, che ha esaminato l'intestazione della biblioteca come codice C++, generato ++ nomi dei simboli C per le funzioni (" _myfunc @ XAZZYE "- questo è chiamato mangling e diverso per ogni compilatore).
Un altro punto in cui viene utilizzata la "C" esterna serve a garantire il collegamento C anche per le funzioni scritte in C++, ad es.
extern "C" void __stdcall PrintHello() {
cout << "Hello World" << endl;
}
Tale funzione può essere esportato in una DLL e sarà quindi richiamabile da un altro linguaggio di programmazione in quanto la compilazione non storpiare il suo nome. Se hai aggiunto un altro overload della stessa funzione, ad es.
extern "C" void __stdcall PrintHello() {
cout << "Hello World" << endl;
}
extern "C" void __stdcall PrintHello(const char *name) {
cout << "Hello, " << name << endl;
}
maggior parte dei compilatori sarebbe poi prendere questo, e quindi impedire l'utilizzo sovraccarichi funzionali nel proprio funzioni DLL-pubblico.
Duplicato di http://stackoverflow.com/questions/67894/why-do-we-need-extern-c-include-foo-h-in-c – Aamir
correlati: 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 / –