1. O que é extern?
Na linguagem C, extern é uma palavra‑chave que indica que você está “emprestando” uma variável ou função que foi definida em outro arquivo. Por exemplo, se quiser usar uma variável global definida em um arquivo a partir de outro arquivo, você usaria extern. Quando um programa é dividido em vários arquivos, extern ajuda a compartilhar dados entre eles.
Pense nisso assim: seu programa é uma casa com muitos cômodos, e extern funciona como um “acordo de empréstimo” que permite usar uma ferramenta do cômodo ao lado. Significa: “Este item não está aqui, mas você pode encontrá‑lo em outro arquivo”.
Exemplo
// file1.c
int g_data = 100;
// file2.c
extern int g_data;
void printData() {
printf("%d\n", g_data); // Accesses g_data defined in file1.c
}
Neste exemplo, g_data é definido em file1.c e, ao usar extern, file2.c consegue acessar essa variável.

2. Relação entre extern e Variáveis Globais
extern está intimamente relacionado a variáveis globais. Uma variável global, uma vez definida, pode ser acessada a partir de qualquer arquivo do programa. Contudo, os outros arquivos não sabem automaticamente da sua existência. É aí que o extern entra — ele informa aos outros arquivos: “Ei, essa variável existe em outro lugar!”
Um ponto importante a observar: extern é apenas uma declaração, não uma definição. Ele não aloca memória. A memória real da variável é alocada no arquivo original onde ela é definida.
Exemplo de uma Variável Global
// file1.c
int counter = 0;
// file2.c
extern int counter; // Refers to counter defined in another file
void incrementCounter() {
counter++; // Updates the value of counter
}
3. Usando extern em Arquivos de Cabeçalho
Em projetos de grande escala, declarar variáveis ou funções repetidamente em cada arquivo pode ser cansativo. É aqui que os arquivos de cabeçalho são úteis. Um arquivo de cabeçalho é um local centralizado para armazenar informações que precisam ser compartilhadas entre vários arquivos. Ao colocar declarações extern em um arquivo de cabeçalho, você facilita a referência a essas mesmas variáveis ou funções globais por parte de outros arquivos.
Você pode pensar em um arquivo de cabeçalho como uma “caixa de ferramentas” para todo o projeto. Ele reúne ferramentas compartilhadas em um único lugar, de modo que os demais arquivos podem simplesmente incluí‑lo e usar o que precisam.
Exemplo de um Arquivo de Cabeçalho
// globals.h
extern int global_variable;
void printGlobalVariable();
// file1.c
#include "globals.h"
int global_variable = 10;
// file2.c
#include "globals.h"
void printGlobalVariable() {
printf("%d\n", global_variable);
}

4. Erros Comuns com extern
Existem alguns pontos importantes a serem lembrados ao usar extern. Por exemplo, você não pode inicializar uma variável ao declará‑la com extern. Isso ocorre porque extern é apenas uma declaração — não uma definição. Além disso, se você declarar uma variável com extern em um arquivo onde a definição real não existe, o programa resultará em um erro de linkedição.
Erro Típico
extern int data = 100; // Initialization is not allowed here
Como mostrado acima, tentar inicializar uma variável com extern causará um erro. extern é usado para referenciar uma variável definida em outro arquivo, não para defini‑la ou inicializá‑la.
5. Casos de Uso Práticos de extern
extern é especialmente útil em projetos de grande porte. Por exemplo, em programas que se estendem por múltiplos módulos, você pode declarar dados ou funções compartilhados usando extern e reutilizá‑los em diferentes arquivos.
Essa abordagem promove a modularidade do seu programa, tornando a base de código mais fácil de manter e compreender. Cada arquivo pode funcionar de forma independente enquanto ainda compartilha os dados necessários por meio de declarações extern.
Exemplo Prático
// main.c
#include "globals.h"
int main() {
printGlobalVariable(); // Calls a function defined in another file
return 0;
}
// globals.c
#include "globals.h"
int global_variable = 100;
void printGlobalVariable() {
printf("%d\n", global_variable); // Prints the global variable
}
Este artigo cobriu tudo, desde o básico de extern até o uso prático. Entender como extern funciona é essencial para dividir e reutilizar código em programação C.



