int;
char fn (int itg, char ch);
it = 5;
char fn (int itg, char ch)
char var = 'O';
if (itg == 1 && CH == 'A')
var = 'z';
retornar var;
A primeira linha é uma declaração variável. A segunda linha teria sido uma assinatura de função se nunca tivesse terminado com um ponto e vírgula seguido por um corpo de função. Esta segunda linha que termina com um ponto de vírgula é um protótipo de função. Também é uma declaração de função. A terceira linha atribui valor à variável inteira: esta é uma inicialização da variável, mas ainda pode ser vista como uma definição variável. O restante do código é uma definição de função. Começa com a assinatura da função, seguida pelo corpo da função.
Há uma nuance em C ++ quando diz respeito à declaração e definição. A declaração a seguir é uma declaração variável:
int it = 5;
Uma declaração variável completa como essa, onde a variável é introduzida e depois atribuída um valor, ainda é uma declaração variável. Portanto, uma declaração variável pode estar apenas introduzindo a variável sozinha ou a introdução com a definição.
O código a seguir (copiado de cima) é uma declaração de função:
char fn (int itg, char ch)
char var = 'O';
if (itg == 1 && CH == 'A')
var = 'z';
retornar var;
Uma declaração de função completa como essa, onde sua assinatura apresenta a função e é seguida pelo corpo da função, ainda é uma declaração de função. Portanto, uma declaração de função pode ser apenas o protótipo de função sozinho, ou pode ser a assinatura da função junto com o corpo da função.
Portanto, uma declaração pode ser com ou sem uma definição. Uma definição é como uma sub-festa de uma declaração. Com a variável, atribuir um valor pela primeira vez é realmente inicialização e não é realmente definido. Quando uma variável é declarada pela primeira vez sem inicialização, sua localização na memória já é fornecida, mas está vazia. Ajustar em um valor no local é uma inicialização, que está concluindo a definição.
Tradicionalmente, um aplicativo C ++ simples possui três arquivos. Tem um arquivo principal que pode ser chamado de primeiro arquivo. Tem um segundo arquivo e um arquivo de cabeçalho. O uso do especificador externo pode reduzir o número de arquivos para dois (de três). Este artigo explica o uso do especificador externo com variáveis e funções para evitar o arquivo de cabeçalho. Nota: No vocabulário C ++, esses dois arquivos são chamados de unidades de tradução.
Conteúdo do artigo
Arquivo de cabeçalho sem externo
Tradicionalmente, um aplicativo C ++ simples possui três arquivos: o arquivo principal com a função principal () que pode ser chamada de primeiro arquivo, um segundo arquivo e um arquivo de cabeçalho. O arquivo de cabeçalho deve ter as declarações de variáveis e funções sem suas definições. As definições das declarações do cabeçalho devem estar no segundo arquivo. No topo do primeiro arquivo, tem que haver,
#include "cabeça.hh "
Onde cabeça.HH é o nome do arquivo de cabeçalho e reside no diretório de usuário para casa. A diretiva inclui não termina com um ponto e vírgula. Nesta situação, as declarações variáveis sem definições e os protótipos de função sem definições de função no arquivo de cabeçalho não devem ser precedidos pelo especificador externo. E o aplicativo deve funcionar.
Ilustração
A variável e função acima são usadas para ilustração aqui.
Digite o seguinte código em um editor de texto e salve-o no diretório de usuário, com o nome, cabeça.HH:
int it = 5;
char fn (int itg, char ch);
Existem apenas duas declarações no cabeçalho. Em seguida, digite o seguinte em um documento sem título do editor de texto e salve no diretório do usuário, com o nome, segundo.CPP:
char fn (int itg, char ch)
char var = 'O';
if (itg == 1 && CH == 'A')
var = 'z';
retornar var;
E, em seguida, digite o seguinte código em outro documento sem título do editor de texto e salve-o no diretório-usuário, com o nome, primeiro.CPP:
#include "cabeça.hh "
#incluir
usando namespace std;
int main ()
cout << it << endl;
cout << fn(1, 'a') << endl;
retornar 0;
Compilar o aplicativo com o seguinte comando terminal:
G ++ primeiro.CPP Segundo.CPP -O completo.exe
Executar o aplicativo com,
./completo.exe
A saída é:
5
z
Infelizmente, o arquivo de cabeçalho não permite uma declaração simples de uma variável (e.g., ) sem inicialização. No entanto, esse problema pode ser resolvido como mostrado abaixo.
externo sem arquivo de cabeçalho
O arquivo de cabeçalho pode ser eliminado se o especificador externo for usado adequadamente. Haverá uma declaração para a variável e função nessa situação, cada uma sem definição no primeiro (principal) arquivo. Cada um será precedido por um externo.
Ilustração
Digite o seguinte código em um editor de texto e salve-o no diretório de usuário, com o nome, primeiro.CPP:
#incluir
usando namespace std;
extern int it;
extern char fn (int itg, char ch);
int main ()
cout << it << endl;
cout << fn(1, 'a') << endl;
retornar 0;
Em seguida, digite o seguinte em um documento sem título do editor de texto e salve no diretório do usuário com o nome, segundo.CPP:
int it = 5;
char fn (int itg, char ch)
char var = 'O';
if (itg == 1 && CH == 'A')
var = 'z';
retornar var;
A definição da variável e da função ocorreu no segundo arquivo. No primeiro arquivo aqui, eles foram declarados sem definição. Nenhum cabeçalho foi incluído neste novo aplicativo. Apenas dois arquivos estão envolvidos. Observe que a variável foi declarada completamente no segundo arquivo, mas sem a palavra extern. Até a função também foi declarada completamente sem a palavra externa. No entanto, a palavra "extern", deve preceder as declarações parciais no primeiro arquivo.
Compilar o aplicativo com o seguinte comando terminal:
G ++ primeiro.CPP Segundo.CPP -O completo.exe
Execute o aplicativo com,
./completo.exe
A saída é:
5
z
O mesmo de antes, mas sem nenhum arquivo de cabeçalho.
Portanto, o especificador externo vincula as declarações entre dois arquivos. Um arquivo deve fazer declaração sem definição e com externo. O outro arquivo deve fazer uma definição, que seria uma declaração completa, mas sem um externo.
Arquivo de cabeçalho e externo
O aplicativo acima teve o problema de que a variável precisava ser declarada completamente no arquivo de cabeçalho. Para ter a declaração de uma variável em um arquivo de cabeçalho sem a definição, a variável deve ser precedida por um externo. Então, se houver,
extern int it;
No arquivo de cabeçalho, haveria
int it = 5;
no segundo arquivo, e ainda haveria
#include "cabeça.hh "
Na parte superior do primeiro arquivo (arquivo principal).
Constante e externo
Em circunstâncias normais, uma constante deve ser inicializada. Por exemplo,
const char ch = 'e';
é permitido e
const char ch;
Não é permitido.
No entanto, com o especificador externo, uma constante pode ser declarada sem inicialização no primeiro e segundo arquivos. Então, se no primeiro arquivo, existe
extern const char ch;
No segundo arquivo, haverá
char ch = 'e';
Sem const no segundo arquivo. CH em ambos os arquivos é a mesma entidade.
Substitua o primeiro.Arquivo CPP com o seguinte conteúdo e salvar:
#incluir
usando namespace std;
extern const char ch;
int main ()
cout << ch << endl;
retornar 0;
Substitua o segundo.Arquivo CPP com o seguinte conteúdo e salvar:
char ch = 'e';
Compilar o aplicativo com o seguinte comando terminal:
G ++ primeiro.CPP Segundo.CPP -O completo.exe
Execute o aplicativo com,
./completo.exe
A saída deve ser, e.
externo e estático
Os especificadores da classe de armazenamento em C ++ são estáticos, Thread_local, extern, mutável. Não mais que um deles pode ser usado em uma determinada declaração. No entanto, em alguns casos, Thread_local e estático podem aparecer na frente de uma declaração de entidade, ou Thread_local e Extern podem aparecer na frente de uma declaração de entidade. Portanto, externo e estático nunca podem estar presentes como especificadores para uma declaração.
Conclusão
O especificador externo vincula duas declarações da mesma entidade, que estão em dois arquivos diferentes. A declaração com o especificador externo não deve ser inicializado ou definido. A declaração no outro arquivo que não possui o especificador externo deve ser inicializado ou definido. Este esquema se aplica a variáveis e funções. Elimina a necessidade de um arquivo de cabeçalho para as variáveis e funções de interesse. Ele permite que uma constante seja declarada sem inicialização em um arquivo e em outro arquivo. Se o programador quiser um arquivo de cabeçalho, para ter uma variável no arquivo de cabeçalho, sem inicialização, o programador deve usar externo para a variável no arquivo de cabeçalho.