Condividi tramite


Utilizzo di extern per specificare un collegamento

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

Note

La parola chiave extern dichiara una variabile o una funzione e specifica che dispone di collegamento esterno (il nome relativo è visibile in file diversi da quello in cui è definito). Quando si modifica una variabile, extern specifica che la variabile ha durata statica (viene allocata quando il programma viene avviato e disallocata al termine del programma). La variabile o la funzione può essere definita in un altro file di origine o successivamente nello stesso file. Dichiarazioni di variabili e funzioni in ambito file sono esterne per impostazione predefinita.

Esempio

// 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;
}

In C++, se utilizzata con una stringa, extern specifica che per i dichiaratori vengono utilizzate le convenzioni del collegamento a un altro linguaggio. Alle funzioni e ai dati C è possibile accedere solo se in precedenza sono stati dichiarati come dotati di collegamento a C. Tuttavia, devono essere definiti in una unità di conversione compilata separatamente.

Microsoft C++ supporta le stringhe "C" e "C++" nel campo string-literal. Tutti i file di inclusione standard utilizzano la sintassi extern "C" per consentire alle funzioni della libreria di runtime di essere utilizzate nei programmi C++.

Nell'esempio seguente vengono illustrati modi alternativi per dichiarare nomi con collegamento 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;

Vedere anche

Riferimenti

Parole chiave C++

Specifiche dei collegamenti

Identificatore di classi di archiviazione extern

Concetti

Comportamento degli identificatori

Collegamento