Avatar ·

¿Qué hace extern "C" en C++ y por qué es necesario al trabajar con bibliotecas de C?

¡Hola! Empecé a estudiar C++ y me encontré con la construcción `extern "C"`, que veo a menudo en archivos de cabecera. Por ejemplo, en bibliotecas como SDL o al conectar funciones antiguas de C. Aquí hay un ejemplo que encontré en un artículo: ```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 ``` Entiendo que esto tiene que ver con el enlace y los nombres de las funciones, pero no puedo entender los detalles. Específicamente me interesa: 1. ¿Por qué sin `extern "C"` pueden ocurrir errores de enlace al usar funciones de C en C++? 2. ¿Qué es "name mangling" y cómo se relaciona con este problema? 3. ¿Por qué envolver las declaraciones en `#ifdef __cplusplus`? Después de todo, si escribo en C++, __cplusplus siempre está definido, ¿verdad? 4. ¿Se puede usar `extern "C"` para mis propias funciones de C++ si quiero que sean accesibles desde código C? Agradecería una explicación con ejemplos simples. Intenté