Partager via


Utilisation d'extern pour spécifier la liaison

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

Notes

Le mot clé extern déclare une variable ou une fonction, et spécifie qu'elle possède une liaison externe (son nom est visible à partir de fichiers autres que celui dans lequel elle est définie). Lorsque vous modifiez une variable, extern spécifie que la variable a une durée statique (elle est allouée lorsque le programme démarre et libérée lorsque le programme se termine). La variable ou la fonction peut être définie dans un autre fichier source ou plus tard dans le même fichier. Les déclarations de variables et de fonctions au niveau de la portée du fichier sont externes par défaut.

Exemple

// 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 langage C++, lorsqu'il est utilisé avec une chaîne, le mot clé extern spécifie que les conventions de liaison d'un autre langage sont utilisées pour le ou les déclarateurs. Les données et les fonctions C sont accessibles uniquement si elles sont déclarées auparavant comme ayant une liaison C. Toutefois, elles doivent être définies dans une unité de traduction compilée séparément.

Microsoft C++ prend en charge les chaînes "C" et "C++" dans le champ string-literal. Tous les fichiers Include standard utilisent la syntaxe extern "C" pour permettre aux fonctions de la bibliothèque Runtime d'être utilisées dans les programmes C++.

L'exemple ci-dessous illustre d'autres méthodes qui permettent de déclarer des noms possédant une liaison 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;

Voir aussi

Référence

Mots clés C++

Spécifications de liaison

Spécificateur extern de classe de stockage

Concepts

Comportement des identificateurs

Liaison