Avatar ·

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