Obra: Programar em C/Bibliotecas
Matéria: Matemática
bibliotecas bibliotecas são conjuntos de funções que foram feitas por alguém que podem ser usadas por outros programas sem que nos preocupemos com código dessas funções além da vantagem de organizar código bibliotecas também têm vantagem de poderem ser utilizadas em vários programas sem necessidade de copiar grandes trechos de código basta dizer ao compilador que queremos adicionar aquela biblioteca ao executável por exemplo vamos tentar criar nossa própria biblioteca com duas funções uma para gerar números pseudo aleatórios uma para calcular valor de pagamento de uma amortização com juros compostos também incluiremos uma função para gerar um número inicial partir da hora atual que fará com que as seqüências de números não sejam sempre as mesmas chamaremos biblioteca de teste include include int rand_seed gerador de números pseudo aleatórios int rand rand_seed rand_seed return unsigned int rand_seed void init_seed rand_seed time null cálculo do valor de cada pagamento de uma amortização dados vp valor presente número de pagamentos taxa de juros em formato decimal double vf double vp int double return vp pow pow as linhas acima são arquivo do código da nossa biblioteca abaixo está código de um programa que testará essa biblioteca lembre se de que os dois trechos devem estar em arquivos separados include int main int n_pgtos double a_vista juros v_pgto rand rand printf números aleatórios printf valor vista scanf lf a_vista printf número de pagamentos scanf n_pgtos printf taxa de juros scanf lf juros juros converte porcentagem em número v_pgto vf a_vista n_pgtos juros printf valor de cada pagamento lf v_pgto return algo que você deve ter notado que nesse arquivo não demos nenhuma informação sobre as funções vf rand nele usadas realmente se você tentar compilar código como está compilador dará um aviso mas ao tentar criar executável montador não poderá continuar pois não recebeu nenhuma informação sobre onde as funções estão para isso precisamos realizar três passos adicionais antes de compilar programa teste fazer um arquivo cabeçalho com informações sobre as funções esse arquivo será incluido com diretiva include da mesma maneira que cabeçalhos padrão como stdio ou math compilar biblioteca separadamente instruir compilador montador procurar pela biblioteca ao compilar programa teste arquivo cabeçalho arquivos cabeçalho são arquivos que contém informações que servem para compilador reconhecer funções ver convenções para chamadas funções ou calling convention macros tipos de dados variáveis que não estão no arquivo sendo compilado esses arquivos costumam ter extensão caso por exemplo dos cabeçalhos padrão stdio math letra usada pois inicial de header cabeçalho em inglês em uma biblioteca os cabeçalhos contêm os protótipos das funções pela biblioteca quando necessário sobre os tipos de estruturas usados bibliotecas mais complexas costumam dividir essas funções entre vários arquivos para fazer nosso próprio cabeçalho precisamos colocar as declarações d
funções entre vários arquivos para fazer nosso próprio cabeçalho precisamos colocar as declarações das funções disponíveis na biblioteca int rand void init_seed double vf double int double se você se lembra da última lição poderá sugerir que coloquemos algumas linhas mais ifndef define int rand void init_seed double vf double int double endif agora sempre que precisarmos usar biblioteca teste basta incluir arquivo teste no início do nosso programa include teste note que se cabeçalho estiver instalado nos diretórios padrão do compilador ou do sistema você deve trocar as aspas pelos sinais de menor maior compilação da biblioteca tendo salvo código da biblioteca no arquivo teste você deve compilar biblioteca no gcc compile arquivo fonte normalmente mas sem gerar executável gcc teste libteste crie arquivo da biblioteca com comando ar você ainda não conhece mas sintaxe simples basta digitar ar rv seguido do nome do arquivo da biblioteca depois dos nomes dos arquivos objeto serem incluídos separados por espaços no gcc as bibliotecas estáticas costumam ter nome lib nome ar rv libteste libteste no ms visual no visual nome padrão das bibliotecas nome lib assim como em vários outros compiladores para windows nele os comandos correspondentes aos dois passos acima são cl teste lib out teste lib teste obj compilação do programa após criar arquivo objeto libteste com comando gcc teste libteste biblioteca estática com comando ar você deve instruir compilador com as opções de edição de links para poder incluí la no seu programa no gcc gcc main libteste main bin lm note as opções que você não conhecia primeira indica em que diretório deve ser procurada biblioteca ponto indica diretório atual se essa opção for omitida compilador procurará apenas nos diretórios padrão segunda uma opção do editor de links indicando uma biblioteca ser incluída compilador procurará pelo arquivo adicionando prefixo lib extensão daí necessidade de dar nome libteste biblioteca mais bibliotecas podem ser incluídas como lm que neste caso serve para chamar biblioteca math do math sem este comando ele poderá apresentar um erro na hora da compilação no visual link out main exe main obj teste lib note que nesse caso simplesmente especificamos os arquivos que devem ser montados diretório de procura pode ser especificado pela opção libpath diretório