Buscar

10.funcoes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

definição, declaração e chamada 
Funções 
Funções 
 Em C, um programa é uma coleção de 
FUNÇÕES. 
 Uma função é um bloco de código que 
recebe um nome e que tem possivelmente 
PARÂMETROS. 
 A partir do nome, o bloco de código que 
forma a função pode ser chamado. 
2 
Funções 
 CHAMAR uma função significa iniciar a 
execução de um bloco de código. 
 Caso a função possua parâmetros, durante 
a CHAMADA dela devem ser indicados 
ARGUMENTOS que são valores ou variáveis 
que irão corresponder aos parâmetros da 
função. 
 Ao final da execução, uma função pode 
ainda retornar um valor para o código que 
fez a chamada da função. 
 
3 
Definição Geral 
 Uma função deve ser definida conforme o 
esquema abaixo: 
 
ESPEC-DECLARAÇÃO ID( DECL-ID-1, ..., DECL-ID-n ) 
{ 
 CORPO_FUNÇÃO 
} 
4 
Definição Geral 
 ID define o nome da função. 
 A lista de declarações DECL-ID-1, ..., DECL-
ID-n é dita LISTA de PARÂMETROS da 
função. 
 Cada ID-i consiste em uma variável com 
escopo local na função e que irá receber, 
como valor inicial, o valor passado como 
ARGUMENTO durante a chamada da função. 
 
5 
Definição Geral 
 Se pensarmos no ID de uma função como 
uma VARIÁVEL GLOBAL, os ESPEC-
DECLARAÇÃO definem que características 
tem este ID: 
 O tipo de dados ( void, int, char *, ... ) 
 Classe de armazenamento ( static ou extern) 
 O tipo de acesso ( const ou volatile ) 
 
6 
Definição Geral 
 O CORPO_FUNÇÃO consiste em 
DECLARAÇÕES de VARIÁVEIS com escopo 
LOCAL seguidas de COMANDOS. 
 Caso o tipo de dados constante nos ESPEC-
DECLARAÇÃO seja diferente de void, deve 
haver ao menos um comando return ...; no 
CORPO_FUNÇÃO. 
 
7 
Definição de Função (antigo) 
 Por questões de compatibilidade, uma 
função pode ainda ser definida seguindo o 
formato originalmente proposto pelos 
projetistas da linguagem. 
 Neste formato original, o que muda é a 
forma de se especificar os parâmetros da 
função: 
ESPEC-DECLARAÇÃO ID( ID-1,...,ID-n ) 
 DECL-ID-1; ...; DECL-ID-n; 
{ 
 CORPO_FUNÇÃO 
} 8 
Declaração de Funções: 
Protótipos 
 O ideal é que toda função, antes de ser 
usada, deve ser declarada. 
 Caso a função encontra-se DEFINIDA no 
mesmo arquivo e em uma posição antes de 
seu uso, então a própria DEFINIÇÃO da 
função serve como DECLARAÇÃO da 
função. 
9 
Declaração de Funções: 
Protótipos 
 Caso contrário, a DECLARAÇÃO da função 
dever ser feita através de PROTÓTIPOS. 
 Um protótipo é como se fosse um 
CABEÇALHO para a função, ou seja, o ID 
da função os ESPEC do tipo retornado pelo 
função e os ESPEC dos tipos de cada 
parâmetro da função: 
 
ESPEC-DECLARAÇÃO ID( ESPEC-DECL-1, ..., ESPEC-DECL-
n ); 
10 
Declaração de Funções: 
Protótipos 
 Em uma situação onde uma função f esteja 
sendo usada sem ter sido antes declarada, 
então implicitamente o compilador 
declarada a função como sendo: 
 
 int f(); 
11 
Um função f() é diferente de 
f(void) ! 
 Um função declarada como: 
 int f(); 
 é diferente de uma função declarada como: 
 int f(void); 
 No primeiro caso, o compilador não sabe se 
a função pode ou não receber argumentos 
durante a sua chamada. Quer dizer, é 
perfeitamente válido fazer: 
 int x = f(3.14); 
 int y = f(2.7, 4); 
 int z = f(); 
12 
Um função f() é diferente de 
f(void) ! 
 No segundo caso, o compilador é informado 
explicitamente que a função não deve 
receber nenhumar argumento. 
 Assim, as duas primeiras linhas do código 
acima gerariam uma mensagem de erro e 
apenas a última seria considerada como 
válida. 
 
13 
Lista de Parâmetros Variável 
 Quando se quer especificar uma função que 
possui uma lista de parâmetros variável em 
número e tipo, deve-se terminar a 
declaração dos parâmetros utilizando três 
pontos ... 
Por exemplo: 
 void f(int a, char * b, ... ); 
 
 Qualquer função que use um número 
variável de parâmetros deve ter ao menos 
um deles explicitamente declarado. 
14 
va_arg(), va_start() e va_end() 
15 
va_arg(), va_start() e va_end() 
16 
va_arg(), va_start() e 
va_end() 
17 
va_arg(), va_start() e 
va_end() 
18 
Chamada de Função 
 Chamar uma função significa iniciar a 
execução de seu corpo de código. 
 Caso a função tenha sido declarada com 
PARAMETROS, durante a chamada deve ser 
passados ARGUMENTOS que correspondam 
em número e tipo com os PARAMETROS da 
função. 
 PARAMETROS são variáveis locais à função 
que irão receber como valores iniciais os 
valores dos ARGUMENTOS utilizados na 
CHAMADA da função. 
19 
Chamada de Função 
20 
Exemplo: CHAMADA por VALOR 
1. unsigned modulo(int x) { 
2. x = x < 0 ? - x : x ; 
 
3. return x; 
4. } 
 
5. int main () { 
6. int a = - 2, ma = modulo(a); 
 
7. printf("| %d | = %d\n", a, ma); 
8. } 
 
21 
Exemplo: simulando CHAMADA 
por REFERÊNCIA 
1. unsigned modulo(int * x) { 
2. *x = *x < 0 ? - *x : *x ; 
 
3. return *x; 
4. } 
 
5. int main () { 
6. int a = - 2, ma = a; 
 
7. modulo(&ma); 
 
8. printf("| %d | = %d\n", a, ma); 
9. } 
 
22 
Chamadas de Funções com 
Arranjos 
 O ID de vetores, matrizes e strings são 
conceitualmente apontadores para o 
primeiro elemento do arranjo. 
 Assim, ao se usar o nome de vetores, 
matrizes ou strings em uma chamada de 
função está-se fazendo uma CHAMADA por 
REFERÊNCIA. 
 Para evitar que modificações acidentais 
ocorram com vetores, matrizes e strings 
passados como argumentos de funções 
deve-se declará-los utilizando o qualificador 
const. 
 
23 
Chamadas de Funções com 
Arranjos 
1. /* *str não deve ser modificado no interior de 
strlen */ 
2. int strlen(const char str[]) { 
3. int i; 
4. 
5. /* str[0] = 'a'; - qualquer tentativa de 
modificar o conteúdo da string apontada por str irá 
gerar uma mensagem de erro ! */ 
 
6. for(i =0; *str; i++, str++); 
7. 
8. return i; 
9. } 
24 
Chamadas de Funções com 
Arranjos 
1. /*str1 deve ser modificada no interior de strlen 
2. já, *str2 não */ 
 
3. int strcpy(char * str1, const char * str2) { 
4. int i = 0; 
5. 
6. /* str2[0] = 'a'; - qualquer tentativa de modificar 
o conteúdo da string apontada por str2 irá gerar uma 
mensagem de erro ! */ 
 
7. do 
8. str1[i] = str2[i]; 
9. while ( str2[i++] ); 
10. 
11. return i - 1; 
12. } 
25 
Ponteiro para Funções 
26 
Ponteiro para Funções - 
Exemplo 
1. #include <stdio.h> 
 
2. int compara(int a, int b) { 
3. if (b < a) return 1; 
4. return 0; 
5. } 
 
6. int ordenacao (int *vet, int size, int (* compara)(int a, int b)) { 
7. int i, j, tmp, sel; 
 
8. for (i=0; i<size-1; i++) { 
9. sel = i; 
10. for (j=i+1; j<size; j++) 
11. if (compara(vet[sel], vet[j])) 
12. sel = j; 
 
13. tmp = vet[i]; 
14. vet[i] = vet[sel]; 
15. vet[sel] = tmp; 
16. } 
 
17. } 
27 
Ponteiro para Funções - 
Exemplo 
 
1. int main() { 
2. int vet[7] = {5,6,1,2,3,7,4}; 
3. int i; 
 
4. ordenacao (vet, 7, compara); 
 
5. for (i=0; i<7; i++) printf("%d ", vet[i]); 
 
6. return 0; 
7. } 
28

Outros materiais