laboratório de programação i: construção de bibliotecas em c
TRANSCRIPT
Construção de bibliotecas em CConstrução de bibliotecas em C
Prof. Alex [email protected]
UNIVERSIDADE FEDERAL DO PAMPACAMPUS BAGÉ
LABORATÓRIO DE PROGRAMAÇÃO I
Bibliotecas
É muito interessante criar bibliotecas cujas funções possam ser reutilizadas em diversos programas. Com isso podemos, inclusive, distribuir essas bibliotecas, com a opção de "esconder" o código-fonte utilizado nas funções:
Ao programar em C, já utilizamos muitas bibliotecas com funções prontas. Ex.: <stdio.h> e <stdlib.h>
Para criarmos nossas próprias bibliotecas é preciso ter:
Arquivos de cabeçalho (com extensão '.h'). Ex.: “fatorial.h”
Arquivos de biblioteca (no gcc a extensão utilizada é '.a'). Ex.: “libfatorial.a”
Laboratório de Programação I – Construção de bibliotecas em C
Criando uma biblioteca
Veremos um exemplo, em C, de biblioteca contendo uma única função, que receba um valor inteiro e retorne seu sucessor.
O arquivo cabeçalho será sucessor.h, e o arquivo com o código-fonte da função será nomeado sucessor.c contendo:
Veja que já incluímos sucessor.h. Isso será necessário para o compilador reconhecer a função como sendo parte da biblioteca.
Laboratório de Programação I – Construção de bibliotecas em C
Criando uma biblioteca
O arquivo cabeçalho irá conter informações apenas da interface, tipicamente as assinaturas (ou protótipos) das funções. A extensão .h vem da palavra header (cabeçalho).
Nesse caso teremos o arquivo cabeçalho, nomeado sucessor.h, definido da seguinte maneira:
As primeiras linhas (#ifndef e #define) tem a função de verificar se o arquivo cabeçalho já foi incluído no projeto, antes de incluí-lo novamente de forma desnecessária.
Laboratório de Programação I – Construção de bibliotecas em C
Criando uma biblioteca
Temos, então, dois arquivos: sucessor.c (função) e sucessor.h (cabeçalho).
Para utilizá-los, devemos gerar o arquivo objeto da biblioteca:
Também criamos a biblioteca, para que possa ser distribuída:
Os arquivos .a são bibliotecas estáticas que tem a vantagem de poder carregar vários objetos. O comando é bastante útil em projetos maiores.
Laboratório de Programação I – Construção de bibliotecas em C
Utilizando a biblioteca
Agora, sempre que for necessário usar funções definidas no arquivo sucessor.c, incluímos o arquivo sucessor.h no programa que vamos implementar.
Abaixo um exemplo de código-fonte, que iremos nomear principal.c, que utiliza a biblioteca sucessor:
Laboratório de Programação I – Construção de bibliotecas em C
Compilando a biblioteca
Na compilação é preciso instruir o compilador com as opções de includes e edição de ligações (linker) para que a biblioteca possa ser incluída no programa executável.
No gcc isso é feito utilizando:
Onde:
-I inclui diretórios onde existam cabeçalhos utilizados no código-fonte.
-L inclui diretórios onde existam bibliotecas que devem ser incluídas no programa.
-lsucessor utiliza o arquivo de biblioteca criado, libsucessor.a -o programa gera como saída o executável principal.
Laboratório de Programação I – Construção de bibliotecas em C
Exercícios
Responda as seguintes questões referentes a criação de bibliotecas em em C.
1. Escreva uma função que recebe como argumentos uma cadeia de caracteres (s) e um caracter (c). A função deve retornar como resultado o número de vezes que (c) aparece em (s). Para o desenvolvimento utilize um arquivo cabeçalho (.h) e uma biblioteca (.a).
Exemplo de saída:
s = unipampac = p
O número de vezes que p aparece em unipampa é 2.
Laboratório de Programação I – Construção de bibliotecas em C