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 ?