Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Funções Ao final desta aula o aluno deverá estar apto a escrever funções que o auxiliem na montagem de programas mais longos. Uma função é um conjunto de instruções em um bloco à parte da função principal (main), referenciada no programa principal pelo seu nome seguido de (). A principal vantagem de utilizar funções é, além de deixar o programa mais claro, permitir que outros programas acessem a função criada evitando sempre o recomeço. Ao longo das últimas aulas utilizamos diversas funções previamente armazenadas, por exemplo, a função getch() que armazena o caractere digitado. Se toda vez o programador que quisesse armazenar o caractere digitado tivesse que montar um programa, o código final seria imenso. Isso nos dá outra vantagem: a existência de funções evita que o programador tenha de escrever o mesmo código repetidas vezes. Qualquer sequência de instruções que apareça mais de uma vez no programa é candidata a ser uma função. O código de uma função é agregado ao programa uma única vez e pode ser executado muitas vezes no decorrer do programa. O grande princípio das linguagens estruturadas é o de dividir um programa em funções. Chamando uma função Chamar uma função é similar a uma terceirização de serviço: ao invocar a função, deve-se passar alguns parâmetros para que o retorno seja o esperado. Desta forma, quando um programa encontra uma função, o desvio do controle é feito para a função e o seu retorno ocorre na linha subsequente à linha a qual houve a chamada. Considere o exemplo a seguir: O simples código acima possui quatro chamadas às funções previamente programadas: duas vezes a printf(), uma vez a scanf() e uma vez a system(). Podemos criar quaisquer funções que sejam úteis para nós mesmos. A sintaxe da instrução da chamada a uma função é a mesma tanto para funções escritas por outros programadores como para as que escrevemos. Funções simples Todo programa contém no mínimo uma função, sendo que a função main() deve estar presente em todos eles. A execução de um programa sempre começa na função main, sendo o seu controle desviado para outra função sempre que há uma chamada a outra função no corpo da função principal. Veja o exemplo a seguir: O exemplo numero_ao_cubo.cpp utiliza uma função simples para elevar um número ao cubo. Note que a chamada a essa função está dentro de uma outra função, o que é totalmente normal. A função é chamada dentro do printf(), então, o controle é desviado para a função cubo(), em que cálculo é feito. O retorno ocorre e o resultado é impresso na tela. Os componentes necessários para adicionar uma função a um programa são: o protótipo da função, a chamada à função e a definição desta. O comando return termina a execução da função e retorna o controle para a instrução seguinte do código de chamada. O protótipo da função Uma função deve sempre ser declarada antes de ter sido chamada. A declaração de uma função é o que chamamos de protótipo da função. O protótipo da função permite que o compilador verifique a sintaxe de chamada à função. O exemplo dado pelo programa numero_ao_cubo.cpp declara a função na instrução: Essa declaração informa que a função de nome cubo() é do tipo int e recebe como argumento um valor int. A definição de uma função O código C que descreve o que a função faz é denominado definição da função. Sua forma geral é a seguinte: A primeira linha é o cabeçalho da definição da função, e tudo o que estiver entre as chaves constitui o corpo da definição da função. A definição de qualquer função C começa com o nome do tipo da função, o mesmo de seu protótipo. Passando vários argumentos para uma função Se vários argumentos são solicitados, eles podem ser passados entre os parênteses na chamada à função, separados por vírgulas. Uma função pode receber quantos argumentos forem necessários, porém sempre retornará apenas um valor. A seguir, vemos o exemplo de um programa que passa dois argumentos para a função retangulo(), cujo propósito é desenhar retângulos de vários tamanhos na tela. Os dois argumentos são a largura e a altura do retângulo; cada retângulo representa um cômodo de uma casa. A primeira linha é o cabeçalho da definição da função, e tudo o que estiver entre as chaves constitui o corpo da definição da função. A definição de qualquer função C começa com o nome do tipo da função, o mesmo de seu protótipo. Passando vários argumentos para uma função Se vários argumentos são solicitados, eles podem ser passados entre os parênteses na chamada à função, separados por vírgulas. Uma função pode receber quantos argumentos forem necessários, porém sempre retornará apenas um valor. A seguir, vemos o exemplo de um programa que passa dois argumentos para a função retangulo(), cujo propósito é desenhar retângulos de vários tamanhos na tela. Os dois argumentos são a largura e a altura do retângulo; cada retângulo representa um cômodo de uma casa. Chamadas a funções usadas como argumentos de outras funções Uma função pode ser utilizada numa expressão da mesma forma que utilizamos valores numéricos e variáveis. Podemos também utilizar a chamada a uma função como argumento para outra função. O exemplo a seguir é a modificação do programa numero_ao_cubo.cpp visto na última aula. Note que a função cubo() está sendo chamada dentro da função printf(). Nesse caso, não há o armazenamento do retorno da função cubo(), pois ela é simplesmente impressa na tela. Macros Na linguagem C há um pré-processador que nada mais é do que um programa que examina o código e executa algumas modificações antes da compilação, com base em instruções chamadas diretivas. As diretivas devem fazer parte do texto-fonte que criamos, mas não farão parte do programa após compilado; elas são retiradas do texto pelo pré-processador antes da compilação. Há uma série de diretivas que são reconhecidas pelo pré-processador, como a #include que já conhecemos. Agora a #define será apresentada. A diretiva #define A diretiva #define, na sua forma mais simples, é usada para definir constantes com nomes apropriados. Quando o compilador encontra a diretiva #define, procura em cada linha abaixo dela a ocorrência da palavra PI e a substitui por 3,14. O nome que segue a palavra #define é chamado identificador. A frase escrita após o identificador é chamada texto. Por convenção, o identificador é sempre escrito em letras maiúsculas. Observe que não há pondo e vírgula após a diretiva do pré-processador. Cada diretiva deve ser escrita em uma nova linha. Por meio da diretiva #define, podemos definir mais do que apenas uma constante.Veja o exemplo: Com a definição acima, onde for encontrada a palavra ERRO, haverá a substituição por printf("\a\aERRO!!). Criação de macros A diretiva #define também pode ser utilizada para aceitar argumentos. A utilização de #define com este propósito é conhecida como macro. Veja o exemplo: Após o pré-processamento, nosso programa será o seguinte: Referências DASGUPTA, Sanjoy; PAPADIMITRIOU, Christos; VAZIRANI, Umesh. Algoritmos. São Paulo: McGraw Hill, 2009. HEINEMAN, George T.; POLLICE, Gary; SELKOW, Stanley. Algoritmos: o guia essencial. Rio de Janeiro: Alta Books, 2009. MANZANO, André Luiz N. G.; MANZANO, Maria Izabel N. G. Estudo dirigido de informática básica. São Paulo: Érica, 2008. MANZANO, José Augusto N. G. Estudo dirigido de linguagem C. São Paulo: Érica, 2009. MANZANO, José Augusto N. G.; OLIVEIRA, Jayr Figueiredo de Oliveira. Algoritmos, Lógica para desenvolvimento de programação de computadores. São Paulo: Érica, 19 ed., 2006. MIZRAHI, Victorine Viviane. Treinamento em linguagem C. São Paulo: Pearson, 2008. 2v. SCHILDT, Herbert. Mayer. C completo e total. São Paulo: Pearson, 2006. VILARIM, Gilvan. Algoritmos de programação para Iniciantes. São Paulo: Ciência Moderna, 2004.
Compartilhar