Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 19

LinguagemC: diretivas,compilaoseparada

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

intsoma(inta,intb) { returna+b; } arquivo.c

#include"arquivo.c" intmain() { soma(1,2); return0; } principal.c

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

intsoma(inta,intb) { returna+b; } arquivo.c

intsoma(inta,intb); intmain() { printf(%d\n,soma(1,2)); return0; } principal.c

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

Você também pode gostar