Estou lendo "Think in C ++" e ele acabou de apresentar a extern
declaração. Por exemplo:
extern int x;
extern float y;
Acho que entendi o significado (declaração sem definição), mas me pergunto quando isso se mostra útil.
Alguém pode dar um exemplo?
c++
variable-declaration
Aslan986
fonte
fonte
extern
em várias ocasiões. As ferramentas da Microsoft produziram um erro de link para os símbolos ausentes quando as tabelas em outro arquivo de origem foram definidas apenas. O problema era que a tabela estavaconst
e o compilador C ++ a promoveustatic
na unidade de tradução. Veja, por exemplo,ariatab.cpp
ekalynatab.cpp
.Respostas:
Isso é útil quando você tem variáveis globais. Você declara a existência de variáveis globais em um cabeçalho, para que cada arquivo de origem que inclua o cabeçalho saiba sobre ele, mas você só precisa “defini-lo” uma vez em um dos seus arquivos de origem.
Para esclarecer, usar
extern int x;
informa ao compilador que um objeto do tipoint
chamadox
existe em algum lugar . Não é tarefa dos compiladores saber onde ele existe, ele só precisa saber o tipo e o nome para saber como usá-lo. Depois que todos os arquivos de origem forem compilados, o vinculador resolverá todas as referênciasx
à definição encontrada em um dos arquivos de origem compilados. Para que funcione, a definição dax
variável precisa ter o que é chamado de "ligação externa", o que basicamente significa que precisa ser declarada fora de uma função (no que geralmente é chamado de "escopo do arquivo") e sem astatic
palavra - chave.cabeçalho:
fonte 1:
fonte 2:
fonte
É útil quando você compartilha uma variável entre alguns módulos. Você o define em um módulo e usa extern nos outros.
Por exemplo:
em file1.cpp:
em file2.cpp:
fonte
global_int
está no espaço para nome global, se eu fosse usá-lo em file2.cpp em alguma seção do espaço para nome, teria que definir o escopo corretamente? isto é,namespace XYZ{ void foo(){ ::global_int++ } };
abc.h
, há uma boa chance de ser definida emabc.cpp
. Um bom IDE sempre ajudará, mas um código bem organizado é sempre uma solução melhor.extern
em file2.cpp, ainda é possível acessar oglobal_int
after include. Por que eu preciso disso?É tudo sobre a ligação .
As respostas anteriores forneceram boas explicações sobre
extern
.Mas quero acrescentar um ponto importante.
Você pergunta
extern
em C ++ e não em C e não sei por que não há resposta mencionando o caso quandoextern
vem comconst
C ++.Em C ++, uma
const
variável possui ligação interna por padrão (não como C).Portanto, este cenário levará ao erro de vinculação :
Fonte 1:
Fonte 2:
Precisa ser assim:
Fonte 1:
Fonte 2:
fonte
extern
definição? Você poderia fazer isso imprimindo o valor daglobal
fonte 2. #extern
for omitido noconst int global = 255;
.Isso é útil quando você deseja ter uma variável global. Você define as variáveis globais em algum arquivo de origem e as declara externas em um arquivo de cabeçalho para que qualquer arquivo que inclua esse arquivo de cabeçalho veja a mesma variável global.
fonte