Partilhar via


Usando extern para especificar ligação

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

Comentários

A palavra-chave extern declara uma variável ou uma função e especifica que tem vinculação externa (seu nome é visível em arquivos diferentes daquele em que é definida). Ao alterar uma variável, extern especifica que a variável tem duração estática (é atribuída quando o programa começa e desalocada quando o programa é encerrado). A variável ou função pode ser definida em outro arquivo de origem, ou posteriormente no mesmo arquivo. As declarações de variáveis e funções no escopo do arquivo são externas por padrão.

Exemplo

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

Em C++, quando usada com uma cadeia de caracteres, extern especifica que as convenções de vinculação de outra linguagem estão sendo usadas para os declaradores. As funções C e os dados podem ser acessados somente se forem declarados anteriormente como tendo vinculação C. No entanto, devem ser definidos em uma unidade de conversão compilada separadamente.

O Microsoft C++ oferece suporte às cadeias de caracteres "C" e "C++" no campo string-literal. Todos os arquivos de inclusão padrão usam a sintaxe extern “C ” para permitir que funções da biblioteca em tempo de execução sejam usadas em programas C++.

O exemplo a seguir mostra formas alternativas de declarar os nomes que têm vinculação 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;

Consulte também

Referência

Palavras-chave C++

Especificações de ligação

Especificador de classe de armazenamento externa

Conceitos

Comportamento de identificadores

Ligação