120 likes | 224 Views
Funções (versão C). Funções são pedaços de código encapsulados para fácil acesso. Em C e C++ o processo de construção de uma função passa por 2 etapas Criação de um protótipo Definição da função
E N D
Funções (versão C) Funções são pedaços de código encapsulados para fácil acesso. Em C e C++ o processo de construção de uma função passa por 2 etapas Criação de um protótipo Definição da função Tipicamente os protótipos vão parar aos header files (*.h, *.hxx) enquanto as definições vão parar aos ficheiros de código (*.c, *.cpp, *.cxx). Quando as funções são frequentemente utilizadas agrupam-se em bibliotecaspara uso com outros programas
Funções (versão C) Para além dos protótipos os header files contêm também definições globais como instruções de pré-processador (#include, #define, etc.). A definição dos header files é uma fase importante do processo de criação de uma biblioteca. Vejamos um primeiro exemplo de criação de funções:
Funções (versão C) Para além dos protótipos os header files contêm também definições globais como instruções de pré-processador (#include, #define, etc.). A definição dos header files é uma fase importante do processo de criação de uma biblioteca. Uma função em C e C++ só pode retornar um valor (então e os vectores?)
Funções (versão C) /************************** Programa que calcula o quadrado de um numero. (versao com funcao) Autor: J. Seixas 2004 ***************************/ #include <stdio.h> double quadrado(double ); /* prototipo */ int main(){ double x; printf("Introduza um numero: "); /* mostra a frase no ecra */ scanf("%lf",&x); /* recebe o valor para x */ printf("Valor do seu quadrado e: %lf\n",quadrado(x)); return(0); } double quadrado(double x) { /* definicao */ return (x*x); /* retorna o valor do quadrado*/ }
Funções (versão C) Problema das funções em C: não há overloading ou seja, não podemos criar funções com o mesmo nome para tipos diferentes. Uma possibilidade em C (e em C++) é criar macros usando as funcionalidades do pré-processador. Isso permite com o mesmo nome ter um código válido para tipos diferentes. A macro utiliza a directiva #define do pré-processador Exemplo simples:#define N 25 Repare-se que não interessa o tipo de N!
Funções (versão C) /************************** Programa que calcula o quadrado de um numero. (versao com macro) Autor: J. Seixas 2004 ***************************/ #include <stdio.h> #define QUADRADO( a ) ( a * a ) /* macro */ int main(){ double x; printf("Introduza um numero: "); scanf("%lf",&x); /* uso da macro QUADRADO */ printf("Valor do seu quadrado e: %lf\n",QUADRADO(x)); return(0); }
Funções (versão C) Vantagens das funções: Verificação do tipo Código final pequeno Pode estender-se por várias linhas e conter definição de variáveis Vantagens das macros: Permite código independente do tipo Rapidez de cálculo Uma macro particularmente útil: #define delta(i, j) {((i)-(j))?0:1} Implementa simultaneamente o delta de Dirac e o delta de Kronecker!
Funções (versão C) Vantagens das funções: Verificação do tipo Código final pequeno Pode estender-se por várias linhas e conter definição de variáveis Vantagens das macros: Permite código independente do tipo Rapidez de cálculo
Funções (versão C) Não: 3+3*3+3 = 15 Formulação correcta: #define QUAD(x) (x) * (x) #define DUP(x) (x) + (x) Problemas com as macros: #define QUAD(x) x * x #define DUP(x) x + x A que é igual QUAD(DUP(3))? Resposta: 36?
Funções (versão C) Funções e variáveis: As variáveis definidas no interior de uma função têm escopo local, ou seja, só existem dentro da função Mesmo as que são passadas no argumento! Nesse caso o valor da variável na chamada à função é copiadopara a variável usada na função. As eventuais mudanças só existem no interior da função e não se manifestam no exterior dela! Variáveis definidas fora de todas as funções têm escopo global, ou seja, são conhecidas por todas as funções e modificáveis por todas as funções! Normalmente quando se sai de uma função as variáveis locais são destruídas juntamente com os valores que contêm! Na verdade o próprio nome da função pode ser usado como variável
Funções (versão C) Funções e variáveis: As variáveis globais têm escopo global, mas apenas no ficheiro onde estão definidas. O nome das funções, sendo por definição declarado fora de todas as funções, é global, mas apenas no ficheiro onde estão definidas! Solução: novos qualificativos static permite a uma variável local de uma função manter o seu valor quando a função termina. Quando aplicado a funções obriga o seu nome a ter escopo local ao ficheiro. extern permite usar o nome de uma função ou variável antes da sua definição. Na prática permite que a função ou variável possa ser definida num outro ficheiro.
Funções (versão C) Funções e variáveis: Problema das variáveis constantes: a maneira mais simples de definir uma constante é usar a directiva #define do pré-processador. O problema é que o #define uma vez introduzido afecta todo o código abaixo da definição. Não tem escopo local nas funções. Solução: mais um qualificativo const: significa que a variável a que está aplicado é constante, ou seja, que só pode ser inicializada uma vez. Mas o escopo da variável continua o mesmo