Material de apoio das aulas de tutoria de Algoritmos e Estrutura de dados da Universidade Federal de Ouro Preto, Campus João Monlevade. O conteúdo abordado é sobre funções em C.
2. O que são funções?
Função é um bloco de código que, como o próprio
nome diz, tem uma função, uma tarefa específica.
Veja função como uma maneira de se evitar a
repetição de código.
3. Por que usar funções?
- Organizar e modularizar o código
- Evitar repetição de código
4. Funções
Se você já fez algum programa, então com certeza
já utilizou uma função, pois a main é uma função.
Praticamente tudo o que programamos é feito em
funções.
5. Estrutura das Funções
Vamos ver como é a estrutura de uma função
int foo(int b) {
int a;
a = b;
return a;
}
Tipo da função: este tipo indica o
tipo de dado que a função retorna.
Se a função não tiver que retornar
nada, ela será do tipo void.
Nome da função: o nome da
função deve seguir as mesmas
regras de nomeação de variáveis.
Parâmetros ou argumentos: a
função pode receber parâmetros
de seu chamador, que podem ser
usados no seu escopo. Uma função
pode ou não ter parâmetros.
Escopo da função: as variáveis que
são definidas dentro da função só
existem lá dentro e não podem ser
utilizadas fora deste escopo.
6. Função main
Como dito, a main é uma função. Mas ela é uma função
especial, como o próprio nome diz, ela é a função principal do
programa. Todo programa se inicia e termina na main.
int main() {
return 0;
}
O return 0, quando inserido na main,
indica para o computador, o ponto de
parada do programa.
7. Funções
É muito importante entender que um programa
pode (e deve) ter várias funções. É importante saber
também, que existem funções pré-definidas pela
linguagem que estão nas bibliotecas do sistema e ás
incluímos através do comando include.
8. Funções incluídas
Um exemplo de uma função pré-definida que
utilizamos a todo momento é a printf. A função
printf é uma função da biblioteca padrão stdio.
#include <stdio.h>
int main(){
printf(“Hello world”);
return 0;
}
A biblioteca padrão, stdio.h, é obrigatória para
execução de qualquer programa, pois a main
também está definida lá. Sem o comando include,
não conseguiríamos utilizar uma função pré-
definida em uma biblioteca. Existem diversas
bibliotecas disponíveis.
9. Programas com e sem funções
Vamos ver um exemplo de dois programas que fazem a mesma coisa, porém um com
duas funções e outro com uma. Seja o problema de somar dois números.
#include <stdio.h>
int main(){
int soma;
int a = 10;
int b = 5;
soma = a + b;
return 0;
}
#include <stdio.h>
int somar (int n1, int n2){
return n1 + n2;
}
int main(){
int a = 10;
int b = 5;
int soma = somar(a,b);
return 0;
}
Todo código na main Utilizando duas funções
10. Análise de um programa com mais de uma função
Vamos analisar a execução
deste programa para ver o
que acontece.
#include <stdio.h>
int somar (int n1, int n2){
return n1 + n2;
}
int main(){
int a = 10;
int b = 5;
int soma = somar(a,b);
return 0;
}
1
2
3
4
5
6
7
11. Passo 1
O programa começa a
executar a partir da função
main.
#include <stdio.h>
int somar (int n1, int n2){
return n1 + n2;
}
int main(){
int a = 10;
int b = 5;
int soma = somar(a,b);
return 0;
}
1
2
3
4
5
6
7
12. Passo 2
A variável a recebe o valor
10.
#include <stdio.h>
int somar (int n1, int n2){
return n1 + n2;
}
int main(){
int a = 10;
int b = 5;
int soma = somar(a,b);
return 0;
}
1
2
3
4
5
6
7
Variável Valor
a 10
13. Passo 3
A variável b recebe o valor 5.
#include <stdio.h>
int somar (int n1, int n2){
return n1 + n2;
}
int main(){
int a = 10;
int b = 5;
int soma = somar(a,b);
return 0;
}
1
2
3
4
5
6
7
Variável Valor
a 10
b 5
14. Passo 4
A execução na main é
colocada em standby até
que haja um retorno da
função chamada.
#include <stdio.h>
int somar (int n1, int n2){
return n1 + n2;
}
int main(){
int a = 10;
int b = 5;
int soma = somar(a,b);
return 0;
}
1
2
3
4
5
6
7
Variável Valor
a 10
b 5
A propósito, a maneira como
chamamos uma função é
com o nome dela e
exatamente a quantidade de
parâmetros que ela requere.
15. Passo 5
A execução se inicia na
função. Neste momento n1 e
n2 recebem os valores
passados na chamada da
função. Neste caso, os
valores de a e b.
#include <stdio.h>
int somar (int n1, int n2){
return n1 + n2;
}
int main(){
int a = 10;
int b = 5;
int soma = somar(a,b);
return 0;
}
1
2
3
4
5
6
7
Variável Valor
a 10
b 5
n1 10
n2 5
16. Passo 6
O programa sabe que uma
função chegou ao fim
quando a execução encontra
a palavra return para
funções que retornam algo.
Para um função que retorna
algo, a palavra return é
obrigatória.
#include <stdio.h>
int somar (int n1, int n2){
return n1 + n2;
}
int main(){
int a = 10;
int b = 5;
int soma = somar(a,b);
return 0;
}
1
2
3
4
5
6
7
Variável Valor
a 10
b 5
n1 10
n2 5
Para funções que não
retornam nada, o fim é
identificado pela chave de
fechamento.
Para o nosso caso, o retorno
deve ser um inteiro. Nada
nos impede de retornar uma
soma, cujo valor é um
inteiro. É exatamente isto
que estamos fazendo.
17. Passo 7
Como a função retornou,
voltamos para a main. É isso
que a retorno faz, voltar
para onde a função foi
chamada e envia o valor de
retorno.
#include <stdio.h>
int somar (int n1, int n2){
return n1 + n2;
}
int main(){
int a = 10;
int b = 5;
int soma = somar(a,b);
return 0;
}
1
2
3
4
5
6
8
Variável Valor
a 10
b 5
n1 10
n2 5
soma 15
A variável soma vai receber
o valor de retorno da função,
que nesse caso é a soma de
n1 e n2, que nos dá 15.
7
18. Passo 9
O programa encontra o
return 0 na main e se
encerra. #include <stdio.h>
int somar (int n1, int n2){
return n1 + n2;
}
int main(){
int a = 10;
int b = 5;
int soma = somar(a,b);
return 0;
}
1
2
3
4
5
6
8
Variável Valor
a 10
b 5
n1 10
n2 5
soma 15
7
19. Alguns fatos que precisamos reforçar
No exemplo anterior aprendemos várias características de uma função. Vamos reforçar
alguns fatos:
• A chamada da função deve passar exatamente o número de parâmetros que a função
requere e todos devem ser do tipo especificado. Se a função requer um inteiro e um
caracter e você passar dois inteiros por exemplo, o programa não irá compilar.
• Se a função retorna algo, este retorno deve ser exatamente do tipo especificado.
• Um função pode chamar outras funções. Você faz isto na main a todo momento e
lembre-se que ela é uma função!
20. Alguns fatos que precisamos reforçar
• Sempre que uma função é chamada, a execução sequencial do programa é
quebrada e enviada para a função. Em algum momento, obrigatoriamente,
essa execução será retomada do mesmo ponto em que parou. Isto
acontece quando a função termina sua execução e acontece então um
retorno para o local de sua chamada, sendo ele a main ou qualquer outra
função.