Avatar ·

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...