El mecanismo extern "C" proporciona la posibilidad de interactuar con código en lenguaje C. Esto permite utilizar bibliotecas C y facilita la conexión entre C++ y otros lenguajes.
Historia del tema: Desde el principio, el lenguaje C++ fue construido sobre la base de C, pero tenía sus propias características, incluyendo 'name mangling', para soportar la sobrecarga de funciones y otras características.
Problema: El nombre de una función en C++ se compila en un símbolo con estructura adicional (mangled), pero en C no existe tal transformación. Como resultado, no es posible simplemente incluir un encabezado de código C en un compilador C++ sin esfuerzos adicionales.
Solución:
Envolver funciones en la construcción extern "C" desactiva el 'name mangling', haciéndolas visibles para el código compilado por el compilador C.
Ejemplo de código:
#ifdef __cplusplus extern "C" { #endif void foo(int); #ifdef __cplusplus } #endif
Características clave:
¿Se pueden sobrecargar funciones con extern "C"?
No, la sobrecarga no es posible, ya que se utiliza el nombre de función estándar de C.
¿Qué sucederá si declaro una función plantilla como extern "C"?
Error de compilación, ya que las plantillas son una característica separada de C++ y no son compatibles con C.
¿Se puede usar extern "C" a nivel de una clase individual?
No, solo para funciones y variables, no para clases o métodos.
Un proyecto en C++ conecta una biblioteca C de terceros sin extern "C", luego el código no se vincula debido a la incompatibilidad en los nombres de símbolos.
Ventajas:
Desventajas:
Se utiliza extern "C" en los archivos de encabezado al integrar bibliotecas C de terceros.
Ventajas:
Desventajas: