Criando uma biblioteca

Autor: 
Marshall Brain

Uma vez que as funções rand e bubble_sort nos programas anteriores são úteis, você provavelmente vai querer reutilizá-las em outros programas que criar. Você pode colocá-las em uma biblioteca de utilitários para facilitar sua reutilização.

Toda biblioteca possui duas partes: um arquivo de cabeçalho e o arquivo de código. O arquivo de cabeçalho, em geral indicado por um sufixo .h, contém informações sobre a biblioteca que os programas que o utilizam precisam saber. Em geral, o arquivo de cabeçalho contém constantes e tipos, junto com protótipos de funções disponíveis na biblioteca. Digite o seguinte arquivo de cabeçalho e salve-o com o nome util.h.

  /* util.h */
  extern int rand();
  extern void bubble_sort(int, int []);  

Estas duas linhas são protótipos de função. A palavra "extern" em C representa funções que serão posteriormente vinculadas. Se estiver usando um compilador antigo, remova os parâmetros da lista de parâmetros do bubble_sort.

Digite o seguinte código em um arquivo denominado util.c.


  /* util.c */
  #include "util.h"
     
  int rand_seed=10;
  /* de K&R   - produz um número aleatório entre 0 e 32767.*/
  int rand()
  {
      rand_seed = rand_seed * 1103515245 +12345;
      return (unsigned int)(rand_seed / 65536) % 32768;
  }
      void bubble_sort(int m,int a[])
  {
      int x,y,t;
        for (x=0; x  m-x-1; y++)
               if (a[y] 

Observe que o arquivo inclui seu próprio arquivo de cabeçalho (util.h) e que utiliza aspas em vez de símbolos < e >, que são utilizados apenas para bibliotecas de sistema. Como pode ver, isto parece um código normal em C. Observe que a variável rand_seed, por não estar no arquivo de cabeçalho, não pode ser visualizada ou modificada pelo programa usando esta biblioteca. Isto se chama ocultação de informação. O acréscimo da palavra static na frente de int força a ocultação completamente.

Digite o seguinte programa principal em um arquivo chamado main.c.


  #include <stdio.h>     
  #include "util.h"
      
  #define MAX 10

  int a[MAX];
      void main()
  {
       int i,t,x,y;
       /* preenche matriz*/
       for (i=0; i 

Este código inclui a biblioteca de utilitários. O benefício principal em utilizar uma biblioteca é que a codificação no programa principal fica muito menor.

Compilando e executando com uma biblioteca
Para compilar a biblioteca, digite o seguinte na linha de comando (assumindo que você está usando UNIX) (substitua gcc por cc, se seu sistema usa cc):

  gcc -c -g util.c  

O -c faz com que o compilador produza um arquivo de objeto para a biblioteca. O arquivo objeto contém o código de máquina da biblioteca. Ele não pode ser executado até ser vinculado a um arquivo de programa que contenha a função principal. O código de máquina reside em um arquivo separado chamado util.o.

Para compilar o programa principal, digite o seguinte:

  gcc -c -g main.c  

Esta linha cria um arquivo denominado main.o que contém o código de máquina do programa principal. Para criar o executável final que contém o código de máquina de todo o programa, vincule os dois arquivos objetos digitando o seguinte:

  gcc -o main main.o util.o 

Isso vincula main.o e util.o para formar um executável denominado main. Para executá-lo, digite main.

Makefiles facilitam o trabalho com as bibliotecas. Você descobrirá mais sobre os makefiles na próxima página.