next up previous contents
Next: A função printf Up: Organização básica de programas Previous: Controle do fluxo de   Sumário


Invocação de funções

Já foi visto na Seção C.1 como uma função é definida. Agora será visto como usar uma função.

Uma função agrupa sob um nome simbólico um conjunto de expressões que realizam uma ação que, potencialmente, pode se repetir diversas vezes. Por exemplo, considere uma aplicação em instrumentação onde os 8 bits menos significativos de uma variável inteira devem ser frequentemente lidos. Seria possível fazer uma função associada à leitura de cada bit, como em

      int get_bit1 (int var) {
          return (var & 01);
      }

      int get_bit2 (int var) {
          return ((var & 02) >> 1);
      }

      ...

      int get_bit8 (int var) {
          return ((var & 0200) >> 7);
      }
o que já auxiliaria no sentido de evitar a repetição das operações de manipulação de bits, reduzindo assim a possibilidade de erro e facilitando o entendimento do código. Estas funções poderiam estar sendo utilizadas pela aplicação como em
      main() {
          int leitura, bit;  /* declaracao de variavel */
          int faz_medida(void),  /* declaracao de funcoes  */
              get_bit1(int),
              get_bit2(int),
              ...
              get_bit8(int);

          do {
              /* alguma funcao de medida */
              leitura = faz_medida();
              bit = get_bit1(leitura); 
              ... /* trata o bit 1 */
              bit = get_bit2(leitura);
              ... /* trata o bit 2 */
              ...
          } while (1);
      }
Este exemplo ilustra alguns pontos interessantes. O primeiro deles é a declaração de funções, onde se expressa quais funções serão utilizadas, quais os tipos de seus argumentos e quais os seus valores de retorno. Um dos ``tipos'' indicados é void, o que significa vazio -- ou seja, a função faz_medida deste exemplo não toma nenhum argumento e retorna um valor inteiro.

Outro ponto interessante é o uso da forma while(1), o que equivale a dizer ``faça para sempre.'' Esta forma é frequentemente utilizada, sendo em geral interrompida por um comando break. Usando o comando for, a forma equivalente seria for(;;).

Outra observação que deve ser feita é que o valor da variável leitura não se altera com as chamadas das diversas funções. Esta é uma característica da passagem por valor dos argumentos da função, que é o padrão em C. O que cada função manipula -- cada variável var -- é na verdade uma cópia do valor da variável passada como argumento (leitura), e não diretamente a variável.



Subsections
next up previous contents
Next: A função printf Up: Organização básica de programas Previous: Controle do fluxo de   Sumário
Ivan L. M. Ricarte 2003-02-14