Você está na página 1de 18

AULA 3 – FUNÇÕES

Rafael Alceste Berri – rafael.berri@udesc.br

1
LPG – FUNÇÕES

• Funções são estruturas que permitem ao programador separar o seu código


em blocos
• Ajudam a tornar o código mais legível e fácil de reutilizar
• Um bom programador deve saber como dividir o seu problema em funções
para torná-lo mais fácil de resolver

2
LPG – FUNÇÕES – DEFINIÇÃO

• Agrupa um conjunto de comandos e associa a ele um nome


• O uso deste nome é uma chamada da função
• Após sua execução, programa volta ao ponto do programa situado
imediatamente após a chamada
• A volta ao programa que chamou a função é chamada de retorno

3
LPG – FUNÇÕES

• Sintaxe:

tipoDeRetorno nomeDaFuncao(listaDeParâmetros) {
corpoDaFuncao;
}

• listaDeParâmetros = tipo1 nome1, ... , tipoN nomeN


• C não aceita funções dentro de funções
• A listaDeParâmetros pode ser vazia!
4
LPG – FUNÇÕES – PARÂMETROS

• Os parâmetros são cópias das variáveis originais (Chamada por valor)


• Mas podemos utilizar ponteiros como parâmetros e com isto alterar o valor
de uma variável que não pertence à função (Chamada por referência)

• Exemplo:
int a;
scanf(“%d”, &a);

5
LPG – FUNÇÕES – PARÂMETROS
(FORMAIS)

• Chamadas por valor


ex: func1(int x)
• Quando chamada, a função recebe o valor da variável passada (uma cópia)
• Os argumentos deixam de existir após a execução do método
• Chamadas por referência (endereço)
ex: func1(int *x)

6
LPG – FUNÇÕES – RETORNO

• Sintaxe:
• return nomeDaVariável;
• nomeDaVariável não é usado em funções que retornam void
• Funções que não possuem retorno são void (return é opcional)
• O return encerra a execução da função
• Pode ser comparado com o break usado nos loops
• Uma função pode ter mais de um return

7
LPG – FUNÇÕES – EXEMPLO 1

int dividir(int a, int b) {


if (!b) {
return 0; // evita a divisão por 0
}

return a / b;
}

8
LPG – FUNÇÕES – EXEMPLO 2

int dobro(int a) {
return 2 * a;
}
int main(int a) {
int c;
c = 8;
c = dobro(c);
return 0;
}

9
LPG – FUNÇÕES – CHAMADA

• Funcionamento de uma chamada:


• Cada expressão na lista de argumentos é avaliada
• O valor da expressão é convertido, se necessário, para o tipo de parâmetro formal
• Este tipo é atribuído ao parâmetro formal correspondente no início do corpo da
função
• O corpo da função é executado

10
LPG – FUNÇÕES – PROTÓTIPO

• Os compiladores de C são muito eficientes, mas isto traz alguns problemas


• Funções só podem ser usadas se forem definidas anteriormente
• A solução é utilizar protótipos de funções
• Sintaxe:
• tipoDeRetorno nomeDaFunção(tipo1, ... , tipoN);

11
LPG – FUNÇÕES – PROTÓTIPO –
EXEMPLO

void b(int); // protótipo de b


void a(int i) {
// ...
b(i);
// ...
}
void b(int j) {
// ...
a(j);
// ...
}

12
LPG - A FUNÇÃO MAIN

• Principal função do programa


• Sintaxe completa:
• int main(int argc, char *argv[]);
• Permite que o usuário passe argumentos para o programa
• argc é quantidade de parâmetros
• argv contém os parâmetros
• Obs.: argv[0] contém o nome do programa por isso, argc > 0

13
LPG - A FUNÇÃO MAIN – EXEMPLO

#include <stdio.h>

int main (int argc, char *argv[]) {


int i;
for (i = 0; i < argc; i++) {
printf("%s\n", argv[i]);
}
printf("total: %d\n", argc);
return 0;
}

14
LPG – LOCAIS ONDE A FUNÇÃO PODE
ESTAR

• Programa principal (main.c)

• Arquivo separado (nomeDaFuncao.c)

• Biblioteca
• nomeDaBiblioteca.h – protótipos das funções e definições básicas
• nomeDaBiblioteca.c – código que efetua as operações (funções)

15
LPG – FUNÇÕES – RECURSIVIDADE

int soma(int a) {
if(a == 0)
return 0;
return a + soma(a - 1); // chamada recursiva!
}
int main(int a) {
int c;
c = soma(10);
return 0;
}

16
LPG – FUNÇÕES – DICAS FINAIS

• uma função pode retornar qualquer valor válido em C, sejam de tipos pré-
definidos ( int, char, float ) ou de tipos definidos pelo usuário ( struct,
typedef )
• uma função que não retorna nada é definida colocando-se o tipo void como
valor retornado (= procedure)
• Pode-se colocar void entre parênteses se a função não recebe nenhum
parâmetro (ou deixe em branco, significa a mesma coisa)
• Qual a menor função possível:
void faz_nada( void ) { }

17
LPG – FUNÇÕES – DICAS FINAIS

• o valor retornado por uma função é sempre copiado para o contexto de


chamada (retorno por valor)
• Exemplos de utilização:
• x = power(2, 5); /* atribuição */
• if (power(7, 2) > 12543) /* comparação */
• printf(“Numero grande!”);
• x = 10*power(2,3); /* expressão */
• funcao( get_arg() ); /* argumento */

18

Você também pode gostar