Usar extern para especificar la vinculación

extern string-literal { declaration-list }
extern string-literal declaration

Comentarios

La palabra clave extern declara una variable o función, y especifica que tiene una vinculación externa (su nombre está visible desde archivos distintos del que la define). Al modificar una variable, extern especifica que la variable tiene duración estática (se asigna cuando se inicia el programa y se desasigna cuando finaliza el programa). La variable o función se puede definir en otro archivo de código fuente, o más adelante en el mismo archivo. Las declaraciones de variables y funciones en el ámbito de archivo son externas de forma predeterminada.

Ejemplo

// specifying_linkage1.cpp
int i = 1;
void other();

int main() {
   // Reference to i, defined above:
   extern int i;
}

void other() {
   // Address of global i assigned to pointer variable:
   static int *external_i = &i;

   // i will be redefined; global i no longer visible:
   // int i = 16;
}

En C++, cuando se usa con una cadena, extern especifica el uso de las convenciones de vinculación de otro lenguaje para los declaradores. Las funciones y datos de C solo están accesibles si se declaran previamente con vinculación de C. Sin embargo, se deben definir en una unidad de traducción compilada por separado.

Microsoft C++ admite las cadenas "C" y "C++" en el campo de string-literal. Todos los archivos de inclusión estándar utilizan la sintaxis de extern de “C” para permitir que las funciones de la biblioteca en tiempo de ejecución se usen en programas de C++.

En el ejemplo siguiente se muestran maneras alternativas de declarar los nombres que tienen vinculación de C:

// specifying_linkage2.cpp
// compile with: /c
// Declare printf with C linkage.
extern "C" int printf( const char *fmt, ... );

//  Cause everything in the specified header files
//   to have C linkage.
extern "C" {
   // add your #include statements here
   #include <stdio.h>
}

//  Declare the two functions ShowChar and GetChar
//   with C linkage.
extern "C" {
   char ShowChar( char ch );
   char GetChar( void );
}

//  Define the two functions ShowChar and GetChar
//   with C linkage.
extern "C" char ShowChar( char ch ) {
   putchar( ch );
   return ch;
}

extern "C" char GetChar( void ) {
   char ch;

   ch = getchar();
   return ch;
}

// Declare a global variable, errno, with C linkage.
extern "C" int errno;

Vea también

Referencia

Palabras clave de C++

Especificaciones de vinculación

extern (Especificador de clase de almacenamiento)

Conceptos

Comportamiento de los identificadores

Vinculación