
paulo1205
(usa Ubuntu)
Enviado em 14/07/2018 - 21:32h
Outra ciosa distinta seriam as declarações de símbolos (particularmente variáveis) que especificam que a ligação (
linkage) entre o símbolo e o programa deve ser externa.
Tal tipo de declaração funciona tanto em C quanto em C++, e seu efeito é fazer com que o compilador não espere que a definição do valor do símbolo ocorra dentro do arquivo/módulo que está sendo compilado, mas que deva ser buscado pelo
linker em outro lugar, tal como uma biblioteca ou arquivo objeto compilado separadamente.
No caso de funções, o
default é ter ligação externa. Para variáveis, a regra é um pouco diferente: para todas as variáveis estáticas que não sejam explicitamente declaradas como
extern ou com uma atribuição de valor explícita no momento da declaração, o compilador providencia um valor
default nulo no momento da declaração. Se, no entanto, você a declarar como
extern, você não pode atribuir um valor, e o compilador entende que aquele nome de variável é válido, embora seu valor e o endereço onde essa variável reside ainda não sejam conhecidos. Quando o
linker for invocado, ele terá de resolver o endereço, a partir de uma definição contida em algum outro código objeto especificado para ligação. Se tal definição
não for encontrada, o
linker vai emitir o erro de “
undefined reference” (ou equivalente no mundo Windows) em referência a essa variável.