Que fait `extern "C"` en C++ et pourquoi est-il nécessaire lors de l'utilisation de bibliothèques C ?
Bonjour ! J'ai commencé à étudier le C++ et je suis tombé sur la construction `extern "C"`, que je vois souvent dans les fichiers d'en-tête. Par exemple, dans des bibliothèques comme SDL ou lors de l'utilisation de fonctions C anciennes.
Voici un exemple que j'ai trouvé dans un article :
```cpp
// my_header.h
#ifdef __cplusplus
extern "C" {
#endif
void my_c_function(int x);
int another_c_function(const char* str);
#ifdef __cplusplus
}
#endif
```
Je comprends que cela a un rapport avec le linkage et les noms de fonctions, mais je n'arrive pas à comprendre les détails. Plus précisément, je m'intéresse à :
1. Pourquoi sans `extern "C"` des erreurs de linkage peuvent-elles survenir lors de l'utilisation de fonctions C en C++ ?
2. Qu'est-ce que le "name mangling" et comment est-il lié à ce problème ?
3. Pourquoi envelopper les déclarations dans `#ifdef __cplusplus` ? En effet, si j'écris en C++, `__cplusplus` est toujours défini, n'est-ce pas ?
4. Puis-je utiliser `extern "C"` pour mes propres fonctions C++ si je veux qu'elles soient accessibles depuis du code C ?
Je serais reconnaissant pour une explication avec des exemples simples. J'ai essayé de...