¿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é