Utiliza extern "C"
para evitar el cambio de nombres dentro de los archivos de encabezado y sus archivos de objetos C++ para bibliotecas u objetos que ya se han compilado sin modificarlos.
Por ejemplo, supongamos que tiene una biblioteca widget
que se compiló con un compilador de C para que su interfaz publicada no se destruya.
Si incluye el archivo de encabezado tal como está en su código, asumirá que los nombres son mutilados y esas versiones destruidas son lo que le dirá al vinculador que busque.
Sin embargo, como solicitará algo como [email protected]_float_charptr
y la biblioteca widget
solo habrá publicado function
, se encontrará con problemas.
Sin embargo, si se incluyen con:
extern "C" {
#include "widget.h"
}
su compilador sabrá que debería tratar de utilizar function
, la versión no mutilada.
Por eso, en los archivos de cabecera para cosas C destinados a ser incluidos en los programas de C _or C++, verá cosas como:
#ifdef __cplusplus
extern "C" {
#endif
// Everything here works for both C and C++ compilers.
#ifdef __cplusplus
}
#endif
Si utiliza un compilador de C para incluir esto, los #ifdef
líneas hará que las cosas extern "C"
desaparezcan. Para un compilador de C++ (donde se define __cplusplus
), todo será sin triturar.
En lugar de piratería '' para evitar renombrado de nombres, el uso el encabezado ''. –
@AlexandreC .: no es una buena idea usar los encabezados ''. Un encabezado '' * no * garantiza colocar identificadores en el espacio de nombres global, rompiendo así el código que se basa en identificadores de espacio de nombres globales cuando ese código se mueve a otro compilador. Además, un encabezado '' puede y en la práctica colocará identificadores en el espacio de nombres global, por lo tanto, en teoría también se rompe el código que se basa en un espacio de nombres global no contaminado. "En teoría" es demasiado vago; al menos un idiota hizo eso. Entonces, no los uses. –
@ AlfP.Steinbach: Si escribe C++, use ''. Si escribe C, use '' y ** compile su código con un compilador de C **.Mezclar idiomas es * no * una buena idea. –