¿Qué hace extern "C" en C++ y para qué sirve?
¡Hola a todos! Llevo poco tiempo programando en C++, y al trabajar con librerías en C (por ejemplo, con alguna librería gráfica antigua), me encuentro constantemente con la construcción `extern "C"`. La veo en archivos de cabecera, pero no termino de entender qué hace.
Por ejemplo, tengo este código:
```cpp
// mylib.h
#ifdef __cplusplus
extern "C" {
#endif
void my_c_function(int x);
#ifdef __cplusplus
}
#endif
```
O cuando yo mismo incluyo un archivo de cabecera de C:
```cpp
// main.cpp
extern "C" {
#include "clibrary.h"
}
```
He leído que esto tiene que ver con "name mangling" (la forma en que se nombran las funciones en el binario), pero no logro entender cómo funciona exactamente. ¿Por qué sin `extern "C"` mi programa no puede encontrar una función de una librería en C y da un error de enlazado como "undefined reference"? ¡Si la he declarado!
Explíquenme, por favor, como a un principiante: ¿qué hace exactamente esta construcción, en qué casos es obligatoria y cómo afecta al proceso de compilación y construcción?