Un endroit où extern « C » est logique lorsque vous liez à une bibliothèque qui a été compilé sous forme de code C.
extern "C" {
#include "c_only_header.h"
}
Sinon, vous risquez d'obtenir des erreurs de l'éditeur de liens, car la bibliothèque contient les fonctions avec C-liaison (_myfunc) mais le compilateur C++, qui a traité l'en-tête de la bibliothèque sous forme de code C++, généré noms C++ symbole pour les fonctions (» _myfunc @ XAZZYE "- ceci est appelé mangling et différent pour chaque compilateur).
Un autre endroit où extern "C" est utilisé est de garantir la liaison C même pour les fonctions écrites en C++, par exemple.
extern "C" void __stdcall PrintHello() {
cout << "Hello World" << endl;
}
Cette fonction peut être exportée vers une DLL et sera alors rachetable d'autres langages de programmation parce que la compilation ne sera pas mutiler son nom. Si vous avez ajouté une autre surcharge de la même fonction, par exemple.
extern "C" void __stdcall PrintHello() {
cout << "Hello World" << endl;
}
extern "C" void __stdcall PrintHello(const char *name) {
cout << "Hello, " << name << endl;
}
La plupart des compilateurs l'attraperaient alors et vous empêcheraient ainsi d'utiliser des surcharges de fonctions dans vos fonctions publiques DLL.
Duplication de http://stackoverflow.com/questions/67894/why-do-we-need-extern-c-include-foo-h-in-c – Aamir
en relation: 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-en-c / –