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
Identificatore di classi di archiviazione extern