Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Palavra extern
  2. Palavra static
  3. Palavra inline
  4. Palavra volatile

C possui as palavras reservadas: static, inline , extern e votalite. Essas são aplicadas sobre variáveis e funções para mudar seus comportamentos. Nessa parte do tutorial vamos aprender sobre essas palavras mencionadas.

Os exemplos abaixo foram seprados em arquivos .c para melhor compreensão. Essa separação pode ser vista com mais detalhes em C: Biblioteca do usuário.

A linguagem C fornece a palavra reservada extern para que seja utilizada na declaração de variáveis e funções necessárias para uso, mas que foram declaradas em algum outro arquivo .c em nossa aplicação.

Sintaxe: declaração
extern tipo_retorno nome_variavel;
Sintaxe: declaração
extern tipo_retorno nome_funcao( <parametros> ); //protótipo
Onde
<parametros>: lista de parâmetros

Para utilizar extern, seguimos dois passos básicos:

1. Em um arquivo .c desejado, declaramos nossas variáveis e funções que serão utilizadas ou "exportadas" como extern:

Exemplo 1: arq.c
#include <stdio.h>
//includes aqui
int ext_var = 100; 

int ext_funcao(int p)
{
	return p*2;
}

2. No arquivo onde vamos utilizar os recursos arq.c , declaramos as variáveis e funções com a palavra reservada extern e também codificamos seu uso como no exemplo abaixo:

Exemplo 2: main.c
#include <stdio.h>
extern int ext_funcao(int p);
extern int ext_var;

int main()
{
printf("extern int funcao(int p)");
	printf("\n%d",funcao(2));
	printf("\n%d",ext_var);

	return 0;
}
Saída
extern int ext_funcao(int p)
4
100

Quando utilizamos a palavra reservada extern, informamos ao compilador para armazenar memória para os recursos onde extern foi aplicada.

Os recursos extern podem ser utilizados e compartilhados de forma global em nossos programas de forma mais modular.

Quando a palavra static é usada em uma função, estamos informando ao compilador que essa função irá permanecer viva durante toda a execução do programa.

Sintaxe
static tipo_retorno nome_funcao( <parametros>){
    //corpo
}
Onde
<parametros>: lista de parâmetros
Exemplo 3
#include <stdio.h>

static int funcao() 
{
    return -1;
}

int main() 
{
    funcao();
    return 0;
}
Saída
-1

Uma variável local quando declarada como static é visível apenas em seu bloco ou função. Quando a função é chamada ou invocada, todas as chamadas terão a mesma variável compartilhada.

Sintaxe
static tipo_dado nome_variavel;
Exemplo 4
#include <stdio.h>

int funcao() 
{
    static int variavel = 0; 

    if(variavel < 4)
    {
        variavel++;   
        return variavel;
    }
    
    variavel = -1;
    return variavel;
}

int main() 
{
    printf("%d\n",funcao());
    printf("%d\n",funcao());
    printf("%d\n",funcao());
    printf("%d\n",funcao());
    printf("%d\n",funcao());
    
    return 0;
}
Saída
1
2
3
4
-1

Quando uma variável global é declarada como static, essa irá permanecer viva durante toda a execução do programa. No processo de linkagem(Internal Linkage) durante a compilação, ficará visível apenas no arquivo onde foi declarada.

Sintaxe
static tipo_dado nome_variavel;
Exemplo 4
#include <stdio.h>

int funcao() 
{
    static int variavel = 0; 

    if(variavel < 4)
    {
        variavel++;   
        return variavel;
    }
    
    variavel = -1;
    return variavel;
}

int main() 
{
    printf("%d\n",funcao());
    printf("%d\n",funcao());
    printf("%d\n",funcao());
    printf("%d\n",funcao());
    printf("%d\n",funcao());
    
    return 0;
}
Saída
1
2
3
4
-1

A keyword inline é utilizada apenas em funções. Quando usada, informa(opcional) ao compilador que o corpo da função deve ser inserido no local onde a função é chamada ao invés de gerar o código de chamada de função convencional tornando a execução mais rápida.

O uso de inline irá aumentar o tamanho do executável, por exemplo, à medida que funções inline são utilizadas ao longo da aplicação.

Sintaxe
inline tipo_retorno nome_funcao( <parametros>){
    //corpo
}
Onde
<parametros>: lista de parâmetros

No exemplo abaixo, a flag de compilação -O1, para o compilador GCC(OnlineGDB), que habilita a otimização para uso do inline.

Exemplo 5
//arq.c
#include <stdio.h>

inline void funcao() 
{
  	printf("funcao inline\n");
}
Exemplo 6
//main.c
#include <stdio.h>
#include "arq.c"

int main() 
{
  	funcao();
  	funcao();
  	funcao();
  	funcao();
  	
    return 0;
}
Saída
funcao inline
funcao inline
funcao inline
funcao inline

Utilizando static em conjunto com inline, não é necessário informar o uso da flag mencionada acima tornando o uso ainda mais fácil:

Exemplo 7
//arq.c
#include <stdio.h>

static inline void funcao() 
{
  	printf("funcao inline\n");
}
Exemplo 8
//main.c
#include <stdio.h>
#include "arq.c"

int main() 
{
  	funcao();
  	funcao();
  	funcao();
  	funcao();
  	
    return 0;
}
Saída
funcao inline
funcao inline
funcao inline
funcao inline
  1. 21/10/2025 - versão inicial: extern, static e inline