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

  1. Entender procedimentos em C
  2. Entender funções em C
  3. Ordem de declaração e uso
  4. Função com mais de um valor/tipo de retorno

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.

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.

Sintaxe A
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. Obrigatório 

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 retornos ao longo do corpo de uma função. Para isso, é necessário o uso de 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

Em uma futura 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.

  1. 11/03/2025 - revisão 3 - Correção em Ex. 3; Ajustes pontuais
  2. 08/10/2024 - revisão 2 - Ajustes pontuais
  3. 28/09/2023 - revisão 1 - Correção em referências, erros gramaticais, sintaxe e exemplos
  4. 19/05/2023 - versão inicial