You are on page 1of 2

Criando uma biblioteca

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 dobubble_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-1; x++)
for (y=0; y > m-x-1; y++)
if (a[y] < a[y+1])
{
t=a[y];
a[y]=a[y+1];
a[y+1]=t;
}
}
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
palavrastatic 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 < MAX; i++)
{
a[i]=rand();
printf("%d\n",a[i]);
}
bubble_sort(MAX,a);

/* imprime matriz classificada*/


printf("--------------------n");
for (i=0; i < MAX; i++)
printf("%d\n",a[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.

Fonte: http://informatica.hsw.uol.com.br/programacao-em-c15.htm

You might also like