Funções, parâmetros e retorno de valores em C

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar

Funções, parâmetros e retorno de valores

Uma função é um bloco de código que pode ser usado diversas vezes em um programa [1].

Os parâmetros são as entradas que uma função pode receber. Através dos parâmetros podemos passar argumentos para a função.

Comentários:
  • Normalmente utiliza-se parâmetros quando se faz referência às variáveis declaradas na definição da função e argumentos aos valores atribuídos a esses parâmetros na chamada da função.
  • Uma particularidade do C é que os argumentos são passados por valor, isto é, os valores dos argumentos sendo passados são copiados nos parâmetros da função chamada no momento em que a função for chamada. Isto é diferente de linguagens como o PASCAL em que os argumentos são passados por referência, na qual a função chamada tem acesso ao argumento original, e não uma cópia local.

Também é possível que uma função retorne um valor, o qual poderá ser utilizado por outras partes do programa. Caso se deseje que a função não retorne nada inclui-se a palavra void antes do nome da função.

Na declaração de funções o tipo de dados tanto dos parâmetros como do retorno da função devem ser declarados.

Exemplo
Função potência, a qual recebe dois inteiros como argumentos (base e n) e retorna a base elevada a potência n.
 #include <stdio.h>
 int Potencia (int base, int n);  /*Protótipo da função*/
 void main ()                     /*Programa principal para teste*/
 {
   int a=2, b=3;
   int p;
   p = Potencia (a, b);           /*Função chamada com argumentos*/
   printf ("Resultado: %d elevado a %d = %d\n", a, b, p);
 }
 int Potencia (int base, int n)   /*Definição da função e seus parâmetros*/
 {
   int p;
   for (p = 1; n > 0; --n)
     p = p * base;
   return p;
 }
Note que o parâmetro n é usado temporariamente dentro da função (decrementado até 0), sem afetar o argumento original com o qual a função foi chamada.
Argumentos por referência em C
Para modificar uma variável global em uma função, a chamada da função deve passar como argumento o endereço da variável, ou seja, um ponteiro para a variável. Para tal, a função deve declarar o parâmetro como do tipo ponteiro e acessar a variável indiretamente através dele.

Argumentos argc e argv

O programa principal main() também pode ter parâmetros. Desta forma, pode-se passar argumentos na hora que o programa principal for chamado.

Para tal, a função main() deve ser declarada da seguinte forma:

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

Os parâmetros argc e argv dão ao programador acesso à linha de comando com a qual o programa foi chamado.

O argc (argument count) é um inteiro e possui o número de argumentos com os quais a função main() foi chamada na linha de comando. Ele é, no mínimo 1, pois o nome do programa é contado como sendo o primeiro argumento.

O argv (argument values) é um ponteiro para um vetor de strings. Cada string deste vetor é um dos parâmetros da linha de comando. O argv[0] sempre aponta para o nome do programa (que, como já foi dito, é considerado o primeiro argumento). É para saber quantos elementos temos em argv que temos argc.

Exemplo 1
Programa que imprime os argumentos com os quais o programa foi chamado.
#include <stdio.h>
void main(int argc, char *argv[])
{
   int i;
   printf("Número de argumentos: %d \n", argc-1);
   for (i = 1; i < argc; i++)
     printf(" %s \n", argv[i]);
}
Exemplo 2
Função potência, a qual recebe dois inteiros como argumentos (base e n) e retorna a base elevada a potência n.
#include <stdio.h>
void main(int argc, char *argv[])
 {
   int base, n;
   int p;
   base = atoi(argv[1]); /*A função atoi() converte string em inteiro*/
   n = atoi(argv[2]);
   for (p = 1; n > 0; --n)
     p = p * base;
   printf ("Potência: %d \n", p);
 }
Exercício
Construir um programa para calcular as raízes de uma equação (do primeiro ou segundo grau), usando argc e argv para passar os argumentos para as equações.
  • Equação do primeiro grau: ax + b = 0
  • Equação do segundo grau: ax2 + bx + c = 0

Se número de argumentos for 2 (a e b) equação do primeiro grau, se for 3 (a, b e c) segundo grau.

Função printf

A função printf usa códigos de controle para indicar o tipo de dados e a posição em que os argumentos serão apresentados.

Código Tipo
%d Inteiro
%f Float
%c Caractere
%s String
%% Imprime %

Referências

  1. TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGENSTEIN, Moshe. Estruturas de dados usando C. Makron Books, 1995.

--Evandro.cantu (discussão) 10h30min de 12 de junho de 2014 (BRT)