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

  1. Procedimentos em C
  2. Funções em C
  3. Ordem de declaração/uso
  4. Função void com return
  5. Retornando mais de um valor
  6. Função aninhada

Os conceitos básicos sobre funções e procedimentos foram visto em Portugol: Funções e também Portugol: Procedimentos, sendo a leitura recomendada.

O uso de funções com struct, enum e union e vetores/matrizes pode ser visto em C: Struct, C: Enum, C: Union, C: Matriz/Vetor e C: Strig/Básico.

Procedimentos em C são blocos de código que pode ser chamado ou invocado e que não retornam nenhum tipo de valor ao término de sua execução. A palavra reservada void é utilizada informando que não há esse retorno mencionado.

Sintaxe
void nome_procedimento()
{
  //corpo 
}
Onde
void: palavra reservada que não haverá retorno

Para invocar um procedimento, utilizamo seu próprio nome no local desejado.

Exemplo 1
//main.c
#include <stdio.h>

void procedimento()
{
    printf("um procedimento");
}

void main()
{
    procedimento();
} 
Saída
um procedimento

Funções em C, são blocos de código que pode ser chamados ou invocados e que retornam um valor após o término de sua execução. O retorno do valor é feito utilizando o como return:

Sintaxe
tipo_retorno nome_funcao()
{
  //corpo função
  return valor;
}
Onde
tipo_retorno: Tipo de dado que será retornado pela função, primitivos ou não.
return: Comando para retornar um valor. Obrigatório
valor: valor retornado.

Os nomes das funções devem seguir as mesmas regras de nomes de variáveis vistos em C Variáveis: Nomenclatura de variáveis.

Para invocar uma função, utilizamos seu próprio nome no local desejado.

Exemplo 2
//main.c
#include <stdio.h>

int funcao()
{
    int variavel = -1;
    //corpo omitido
    return variavel;
}

void main()
{
    int retorno = funcao();
    printf("%d",retorno);

} 
Saída
-1

Caso o retorno de uma função não seja necessária, basta chamar não atribuir o seu retorno à uma variável para descartá-lo.

Exemplo 3
#include <stdio.h>

void main()
{
    int ret = printf("%d",t); //capturando retorno
    printf("%d",t); //descarando retorno

} 
Saída
1
2

As funções em C podem retornar apenas um valor, porém é possível que sejam utilizados vários comandos return ao longo do corpo de uma função. Para isso, é necessário o uso e C: Comandos de Decisão ou C: Comandos de Escolha.

Exemplo 4
//main.c
#include <stdio.h>

int funcao(){
  
    int valor = 0;
    //manipulação de valor omitida
    
    if(valor == 0)
        return 0;
    else
        return -1;
}

void main() 
{
    int ret = funcao();
    printf("%d",ret);
}
Saída
1
2

Não é possível que uma função em C retorne mais de um valor ou tipo. Para tal, o uso ponteiros, structs e vetores podem ser utilizados. Ponteiros podem ser vistos em C: Ponteiros.

As funções e procedimentos podem ser criados antes ou depois da função main, levando em consideração que possuímos apenas o arquivo main.c. Nessa situação, podemos utilizar as regras:

  1. Declarando uma função/procedimento antes da main, essa função pode ser chamada normalmente
  2. Declarando uma função/procedimento após a main, um protótipo dessa função deve ser declarado antes da main.
Exemplo 5
//main.c
#include <stdio.h>

void funcao2(); //protótipo da função 2

void funcao1() {
    printf("funcao1 \n");
}

void main () {
    funcao1();
    funcao2();
}

void funcao2() {
    printf("funcao2 \n");    
}
Saída
funcao1
funcao2

Na seção, C: Biblioteca de Usuário, vamos aprender a separar os nossos programas em arquivos .c e .h para melhor organização. Lá, vamos separar corretamentes as funções e seus protótipos.

A uso de protótipos no exemplo acima foi feita apenas para compreensão, não sendo utilizadas para programas mais complexos.

Quando declaramos uma função, seu retorno pode ser definido como void. Mesmo assim, podemos utilizar o comando return sem um valor nos permitindo sair dessa função a qualquer "momento".

Exemplo 6
//main.c
#include <stdio.h>

void procedimento(int param)
{
    if (param == 0)
        return;
    
    printf("%d",param);
}

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

Como pode ser observado no exemplo acima, não foi necessário declarar um bloco de código else, pois o comando if encerra a função executando o comando return.

  1. 27/04/2026 - revisão 5 - Adição: 'função void com return'
  2. 03/09/2025 - revisão 4 - Ajustes: pontuais e sintaxes
  3. 11/03/2025 - revisão 3 - Correção em Ex. 3; Ajustes pontuais
  4. 08/10/2024 - revisão 2 - Ajustes pontuais
  5. 28/09/2023 - revisão 1 - Correção em referências, erros gramaticais, sintaxe e exemplos
  6. 19/05/2023 - versão inicial