Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 16
Aula 16
Prof.Crston AlgoritmoseProgramao
AlgoritmoseProgramao:linguagemC
Diretivasdoprprocessador
Permitequeoprogramadormodifiqueacompilao Oprprocessadorumprogramaqueexaminae modificaocdigofonteantesdacompilao Asdiretivassooscomandosutilizadospelopr processador
Estescomandosestarodisponveisnocdigofonte,masnono cdigocompilado
Asdiretivasiniciamcom#
Ex.:#include<stdio.h>
AlgoritmoseProgramao:linguagemC
Diretiva#include
Permiteinserirumarquivoqualquernocdigofonte Adiretivaincludesubstitudapelocontedodoarquivo Quandousamos<>paraindicaroarquivo,estearquivo procuradosomentenapastainclude(nolinux, /usr/include) Quandoutilizamosparaindicaroarquivo,estearquivo procuradonapastaatual,esenoforencontrado procuradonapastainclude
AlgoritmoseProgramao:linguagemC
Diretiva#include
prompt$gccprincipal.c
AlgoritmoseProgramao:linguagemC
Diretiva#define
Permitedefinirconstantessemconsumirmemria duranteaexecuo Nouseosinaldeatribuio(=)!
#definePI3.14 intmain() { doubleraio=1.0; doublearea=PI*raio*raio; ... return0; }
AlgoritmoseProgramao:linguagemC
Diretiva#define
Permitedefinirtrechosfixosdecdigo
#defineERROprintf("Ocorreuumerro\n");exit(1); intmain() { ERRO; ... return0; }
AlgoritmoseProgramao:linguagemC
Diretiva#define
Permitedefinirtrechosdecdigocomparmetros (macros) Nopodeterespaosnoidentificador.Ex.:SOMA(x,y)
#defineSOMA(x,y)x+y intmain() { inta=SOMA(1,2); doubleb=SOMA(1.0,2.0); ... return0; }
AlgoritmoseProgramao:linguagemC
Diretiva#define
Recomendaseusarparntesesemmacros..
#defineSOMA(x,y)x+y intmain() { printf("%d\n",10*SOMA(1,2)); ... return0; }
AlgoritmoseProgramao:linguagemC
Diretiva#define
Recomendaseusarparntesesemmacros..
#defineSOMA(x,y)x+y intmain() { printf("%d\n",10*SOMA(1,2)); ... return0; } //soluo:#defineSOMA(x,y)(x+y)
AlgoritmoseProgramao:linguagemC
Diretiva#define
Recomendaseusarparntesesemmacros..
#definePRODUTO(x,y)(x*y) intmain() { printf("%d\n",PRODUTO(2+3,4)); ... return0; }
AlgoritmoseProgramao:linguagemC
Diretiva#define
Recomendaseusarparntesesemmacros..
#definePRODUTO(x,y)(x*y) intmain() { printf("%d\n",PRODUTO(2+3,4)); ... return0; } //soluo:#definePRODUTO(x,y)((x)*(y))
AlgoritmoseProgramao:linguagemC
Diretiva#undef
Removeadefiniocriadacom#define
#defineTAM_STRING20 ... #undefTAM_STRING #defineTAM_STRING100
AlgoritmoseProgramao:linguagemC
Compilaocondicional
#defineDEBUG intmain() { ... #ifdefDEBUG printf("Descricaodetalhada:...\n"); #else printf("Nenhumadescricao\n"); #endif ... }
AlgoritmoseProgramao:linguagemC
Compilaocondicional
#defineDEBUG1 intmain() { ... #ifDEBUG==1 printf("Descricaodetalhada:...\n"); #elifDEBUG==2 printf("Descricaoresumida:...\n"); #else printf("Nenhumadescricao\n"); #endif ... }
AlgoritmoseProgramao:linguagemC
Compilaocondicional
Podemosfazeradefinionalinhadecomandono momentodacompilao prompt$gccDDEBUGprograma.c
prompt$gccDDEBUG=2programa.c
AlgoritmoseProgramao:linguagemC
Compilaoseparada
Podemosseperarnossoprogramaemvriosarquivos utilizandoadiretiva#include Porm,seriainteressantecompilarapenasosarquivos queforammodificadosdesdealtimacompilao
Sistemasgrandespodemlevarmuitosminutosparacompilar
Podemoscompilarcadaarquivo.cseparadamente, produzindoumarquivo.oparaarquivo.c
Ex.:prompt$gcccarquivo.c
Parageraroexecutvel,devemosentopassaros arquivos.o
Ex.:prompt$gccprincipal.carquivo.o
AlgoritmoseProgramao:linguagemC
Compilaoseparada
necessrioinseriroprottipodafunosomaemprincipal.c.
AlgoritmoseProgramao:linguagemC
Arquivodecabealho(.h)
Todavezqueumprogramautilizarocdigocontidoem arquivo.c,deverinserirosprottiposdasfunese declararasvariveiscomextern.. Parasimplificar,paracadaarquivocompilado separadamentecriamosumarquivodecabealho contendo
osprottiposdasfunes, declaraodosnovostipos(struct,enum..) constantes(#define)
AlgoritmoseProgramao:linguagemC
Compilaoseparada
#includearquivo.h #includearquivo.h intsoma(inta,intb) { returna+b; } arquivo.c intsoma(inta,intb); arquivo.h intmain() { x=2.0; printf(%d\n,soma(1,2)); return0; } principal.c