Avatar ·

Que fait extern "C" en C++ et pourquoi est-il nécessaire ?

Bonjour à tous ! Je programme en C++ depuis peu, et en travaillant avec des bibliothèques en C (par exemple, une vieille bibliothèque graphique), je tombe constamment sur la construction `extern "C"`. Je la vois dans les fichiers d'en-tête, mais je ne comprends pas complètement ce qu'elle fait. Par exemple, j'ai ce code : ```cpp // mylib.h #ifdef __cplusplus extern "C" { #endif void my_c_function(int x); #ifdef __cplusplus } #endif ``` Ou quand j'inclus moi-même un fichier d'en-tête C : ```cpp // main.cpp extern "C" { #include "clibrary.h" } ``` J'ai lu que cela a un rapport avec le "name mangling" (nommage des fonctions dans le binaire), mais je ne comprends pas exactement comment cela fonctionne. Pourquoi sans `extern "C"` mon programme ne trouve-t-il pas la fonction d'une bibliothèque en C et génère-t-il une erreur de linkage du type "undefined reference" ? Pourtant, je l'ai déclarée ! Expliquez-moi, s'il vous plaît, en tant que débutant : que fait exactement cette construction, dans quels cas est-elle obligatoire, et comment affecte-t-elle le processus de compilation et d'édition de liens ?