Buscar

TUTORIAL PARA CRIAR BIBLIOTECAS EM C++

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
Construindo uma Biblioteca 
 
O processo para criar uma biblioteca protegida contra redefinições de funções 
inclui o conhecimento de algumas diretivas Aconselho a ler mais sobre o 
assunto na internet, principalmente, nos tutoriais. 
 
O objetivo de incluir a construção de uma biblioteca no nosso curso foi para 
mostrar que não é algo tão complicado como parece e porque você, com 
certeza, precisará criar funções que usará em vários programas. Além disso, 
seus programas ficarão mais legíveis. 
 
Sei que é complicado sugerir endereços, pois amanhã os artigos poderão não 
estar mais disponíveis. Entretanto, como sugestões: 
 
http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node150.html
http://www.cplusplus.com/doc/tutorial/ 
 
Sendo assim, acrescento alguns elementos retirados dos tutoriais que 
poderão lhe ajudar neste estudo e que estão delimitados por linhas já que não 
tem sentido colocá-los entre aspas. 
____________________________________________________________________ 
#ifndef MYHEADER_H 
#define MYHEADER_H 
. . . // This will be seen by the compiler only once 
#endif /* MYHEADER_H */ 
 
#ifdef, #ifndef, #if, #endif, #else e #elif 
 
Essas diretivas permitem descartar parte do código de um programa se certa condição 
não for satisfeita. 
 
#ifdef permite que uma seção de um programa seja compilada somente se a 
constante definida que for especificada como parâmetro foi definida, 
independentlemente de seu valor. Sua operação é: 
 
 #ifdef nome 
 // código 
 #endif 
 
Por exemplo: 
 
#ifdef MAX_WIDTH 
char str[MAX_WIDTH]; 
#endif 
 
Nesse caso, a linha char str[MAX_WIDTH]; só é considerada pelo compilador se a 
constante definida MAX_WIDTH foi definida anteriormente, independentemente de seu 
valor. Se não foi definida, essa linha não será incluída no programa. 
 
#ifndef serve para o oposto: o código entre a diretiva #ifndef e a diretiva #endif só é 
compilado se o nome da constante que estiver especificada não tivesse sido definido 
anteriormente. Por exemplo: 
 
2 
 
 #ifndef MAX_WIDTH 
 #define MAX_WIDTH 100 
 #endif 
 char str[MAX_WIDTH]; 
 
Nesse caso, se ao chegar nesse pedaço de código a constante definida MAX_WIDTH 
ainda não tiver sido definida, seria definida com o valor de 100. Se já existisse, 
manteria o valor que já tinha (porque o comando #define não será executado). 
 
As diretivas #if, #else e #elif (elif = else if) serve para que a porção de código que 
seja seja compilada somente se a condição especificar estiver de acordo. A condição 
só serve para avaliar expressões constantes. Por exemplo: 
 
 #if MAX_WIDTH>200 
 #undef MAX_WIDTH 
 #define MAX_WIDTH 200 
 
 #elsif MAX_WIDTH<50 
 #undef MAX_WIDTH 
 #define MAX_WIDTH 50 
 
 #else 
 #undef MAX_WIDTH 
 #define MAX_WIDTH 100 
 #endif 
 
 char str[MAX_WIDTH]; 
 
Note como a estrutura das diretivas encadeadas #if, #elsif e #else termina com 
#endif. 
#line 
 
Quando compilamos um programe a acontecem erros durante o processo de 
compilação, o compilador mostra o erro que aconteceu precedido pelo nome do 
arquivo e a linha dentro do arquivo que no qual o erro aconteceu. 
 
A diretiva #line nos permite controlar ambas as coisas, o número de linhas dentro dos 
arquivos de código assim como o nome do arquivo que queremos que apareça quando 
um erro acontecer. Sua forma é a seguinte: 
 
 #line número "nome_do_arquivo" 
 
No qual número é o número da linha que será atribuída à próxima linha de código. O 
número de linha de linhas sucessivas será incrementado de um em um a partir dessa. 
 
nome_do_arquivo é um parâmetro opcional que serve para substituir o nome do 
arquivo que queremos que apareça em caso de erro até que outra diretiva mude isso 
novamente ou que chegue no final do arquivo. Por exemplo: 
 
 #line 1 "atribuicao de variavel" 
 int a?; 
 
 
3 
Esse código irá gerar um erro que será exibido como um erro no arquivo "atribuicao 
de variavel", na linha 1. 
#error 
 
Essa diretiva aborta o processo de compilação quando é encontrada, retornando o 
erro que foi especificado como parâmetro: 
 
#ifndef __cplusplus 
#error E preciso um compilador C++ 
#endif 
 
Esse exemplo aborda o processo de compilação se a constante definida __cplusplus 
não estiver definida. 
#include 
 
Essa diretiva também tem sido usada arduamente em outras seções desse tutorial. 
Quando o pré-processador encontra uma diretiva #include, ele a substitui por todo o 
conteúdo do arquivo especificado. Há duas maneiras para especificar um arquivo para 
ser incluído: 
 
#include "file" 
#include <file> 
 
A única diferença entre ambas as expressões são os diretórios no qual o compilador 
irá procurar pelo arquivo. No primeiro caso em que o arquivo é especificado entre 
aspas, o arquivo é procurado no mesmo diretório que inclui o arquivo contendo a 
diretiva. Caso não esteja lá, o compilador procura pelo arquivo nos diretórios padrões, 
que estão configurados para procurar pelos arquivos de cabeçalho padrão. 
 
Se o nome do arquivo estiver entre sinais de menor e maior <>, o arquivo é 
procurado diretamente onde o compilador está configurado para procurar pelos 
arquivos de cabeçalho padrão. 
#pragma 
 
Essa diretiva é usada para especificar diversas opções para o compilador. Essas 
opções são específicas para a plataforma e que compilador que você usa. Consulte o 
manual ou a referência de seu compilador para mais informações sobre os parâmetros 
possíveis que podem ser definidos com #pragma. 
____________________________________________________________________ 
 
Por hora, você poderá colocar as suas funções em um arquivo e salvá-lo com a 
extensão h. 
 
Inclua bibliotecas nesse arquivo caso você faça uso de funções pré-definidas. 
 
Onde salvar a biblioteca? 
 
1) Se puder, salve dentro da pasta include onde se encontram todas as 
bibliotecas. 
 Estando dentro dessa pasta, você poderá chamar: #include <nome.h> 
 
 
4 
2) Se não puder, salve dentro da pasta onde se encontra o arquivo fonte (fica 
mais fácil). 
 
Estando dentro dessa pasta, você poderá chamar: #include ”nome.h” 
 
Essa foi a biblioteca usada no último programa da aula. Ela foi salva com o 
nome minhas.h 
Código 
#include <cmath> 
 
void arredonda(double a[], int tam) 
{ 
 for(int x=0; x<tam;x++) 
 a[x]=ceil(a[x]); 
} 
 
double media(double n[], int tam) 
{ 
 double soma=0; 
 for(int x=0; x<tam;x++) 
 soma+=n[x]; 
 return soma/tam; 
} 
 
int contaMaioresQue8(double num[], int tam) 
{ 
 int conta=0; 
 for(int x=0; x<tam;x++) 
 if(num[x]>8) 
 conta++; 
 return conta; 
} 
 
 
 
 
No código fonte, como ela foi armazenada no mesmo diretório do arquivo 
fonte, foi chamada entre aspas. 
 
#include <iostream> 
#include "minhas.h" 
... 
 
 
 
 
	Construindo uma Biblioteca

Outros materiais