Está en la página 1de 16

Lenguaje C Preprocesador, Compilacin y Enlazado.

Omar Andrs Zapata Mesa rupo de !enomenolog"a de #nteracciones !undamentales, $ %i%& 'ni(ersidad de Antio)uia

*irecti(as de Compilacin
Las

directi(as de compilacin son a)uellas e+presiones )ue empiezan por , y sir(en para indicar en tiempo de compilacin un n-mero de operaciones ./sicas para tener control de in%ormacin mientras se cumple con la etapa pre(ia a la compilacin llamada preprocesado. El preprocesado es a)uella etapa donde el compilador limpia el cdigo de comentarios y remplaza todos a)uellos (alores e+istentes en las directi(as de compilacin por todo lo necesario para crear c0digo o.jeto.

*irecti(as de Compilacin
Las
,error ,include ,i% ,else ,eli% ,endi% ,i%de% ,i%nde% ,unde%

directi(as )ue soporta el A12# C 2on3


*e%ine constantes o !unciones Para la compilacion por un error #ncluye un arc4i(o en el codigo e(alua (alor de una (aria.le ,de%ine e(alua (alor de una (aria.le ,de%ine e(alua (alor de una (aria.le ,de%ine 5erminacin de un condicional ,i% Mira si un (alor ya %ue de%inido Mira si un (alor no %ue de%inido 6uita una de%inicin

,de%ine

,line ,pragma

Modi%ica los (alores de 77L#1E77 y 77!#LE77 Permite pasar opciones al compilador

Macronom.res prede%inidos
Los

macronom.res son (aria.les ya de%inidas en el am.iente de compilacin, se nom.ran con dos underline al %inal y al principio.
77L#1E77 77!#LE77 77*A5E77 775#ME77 7725*C77 1ro de la linea 1om.re del arc4i(o !ec4a 5iempo 6ue pertenece al estandar.

Cada compilador cuenta con una serie de macronom.re propios de%inidos para cada plata%orma y ar)uitectura.

Opciones 8/sicas del Compilador


9c 9E 9I 9L 9* 9l
-fPIC -W -o

2olamente Compilar 2olamente Preprocesar :uta a las ca.eceras :uta a las li.rerias (alor de directi(a (link) enlazar una librera Position Independent Code Modificar mensajes de advertencia (output) indicar archivo de salida.

Ejemplo *eirecti(as $dic.4&


,i% ;de%ined$L#1& << ;de%ined$=#1& ,error >use gcc con 9*=#1 o 9*L#1> ,endi% ,de%ine 1OM8:E >OMA:> ,de%ine O2 >*esconocido> ,i% de%ined$L#1& ,pragma CC message$>'sando Linu+ 8ien;;>& ,de%ine O2 >L#1'?> ,eli% de%ined$=#1& ,pragma CC message$>'sando =indo@s Mal;;>& ,de%ine O2 >=#1*O=2> ,@arning >Estas usando un muy mal O2;;> ,i% ;de%ined$PE:M#2#AO& ,error >1o se puede usar @indo@s> ,endi% ,endi% int print%$const c4ar Brestrict, ...&C ,de%ine p$M2 ,71,7O2& print%$M2 ,71,7O2& DDcomentario de prue.a ,de%ine de.ug$M2 & print%$>*epurando3EFGGHFICGJm linea EFGGHFFm K LdEn arc4(io K LsEn msg K LsEn>,77L#1E77,77!#LE77,,M2 &

Ejemplo *eirecti(as $dir.c&


,includeMdir.4N DD,include>dir.4> int main$& O de.ug$Antes del imprimir&C DD print%$>te llamas Ls y usas Ls En>,1OM8:E,O2&C p$>te llamas Ls y usas Ls En>,1OM8:E,O2&C de.ug$despues del imprimir&C P

Corremos los siguientes comandos y analizamos. gcc 9E 9*L#1 dir.c 9I. 9o dir.pre gcc 9*L#1 dir.c 9I. 9o dir << gcc dir.c

<< gcc 9*L#1 9c dir.c

9I. 9o dir.o

Compilacin 2eparada
Es

la .ase en al construccin de proyectos grandes, por )ue permite aislar el cdigo en pe)ueQas porciones y tener un menjor control so.re la depuracin, compilacin y enlazado, 2e di(ide en Preprocesando, Compilacin, Ensam.lado, Enlazado. Este proceso por lo regular se 4ace con ayuda de programas de automatizacin de compilacin como lo son los MaRe%iles )ue (eremos m/s adelante

Compilacin
La

compilacin trans%orma el cdigo C en el lenguaje ensam.lador propio del procesador de nuestra m/)uina. S gcc 92 9#. dir.c realiza las dos primeras etapas creando el arc4i(o dir.sC e+amin/ndolo con S more dir.s puede (erse el programa en lenguaje ensam.lador.

Ensam.lado

El ensam.lado trans%orma el programa escrito en lenguaje ensam.lador a cdigo o.jeto, un arc4i(o .inario en lenguaje de m/)uina ejecuta.le por el procesador. El ensam.lador se denomina as3 S as 96y 9o dir.o dir.s Crea el arc4i(o en cdigo o.jeto dir.o a partir del arc4i(o en lenguaje ensam.lador dir.s. 1o es %recuente realizar slo el ensam.ladoC lo usual es realizar todas las etapas anteriores 4asta o.tener el cdigo o.jeto as"3 S gcc 9c dir.c

Enlazado
Enlazar

es agrupar todo el cdigo o.jeto necesario para )ue se genere un cdigo listo para lanzar al O2, contiene todo lo necesario para )ue la ejecucin se correcta. Para enlazar a .ajo ni(el usamos el programa ld aun)ue es mas %/cil enlazar directamente con gcc mostrar un ejemplo de como ser"a usando ld en clase. Para (er todo este proceso se le puede dar al compilador la opcin 9(

MaRe%ile
'n

MaRe%ile es un arc4i(o usado por el programa de compilacin maRe, en este se encuentran todas las rdenes re)ueridas para contruir un proyecto de so%t@are. Contiene una (aria.les ./sicas de%inidas como lo son CC C!LA 2 L*!LA 2 y unos o.jeti(os espec"%icos llamados reglas.

Ejemplo Completo Compilacin y maRe


,includeMmat4.4N ,includeMstdio.4N int %act$int +&C ,de%ine P# G.ITIU mili..4

mili..c int %act$int +&O i%$+KKF& return IC else return +B%act$+9I&C P ,includeMmili..4N int main$& O print%$>%act$T& K LdEn>,%act$T&&C P main.c

Ejemplo Completo Compilacin y maRe


CC K gcc C!LA 2 K 9c 9*L#1 9#. L*!LA 2 K 9lm all3mili..c mili..4 main.c S$CC& S$C!LA 2& mili..c 9o mili..o S$CC& S$C!LA 2& main.c 9o main.o S$CC& mili..o main.o S$L*!LA 2& 9o %act

Ejercicios
Vacer

modulos de n-meros complejos con su .4 y su .c, adem/s 4acerle un MaRe%ile. Vacer )ue los mdulos de los n-meros complejos cuando se les meta la directi(a de compilacin 9*de.ug impriman in%ormacin e+tra en los c/lculos.

:e%erencias
C Manual de :e%erencia Ver.ert 2c4ildt 2ugerida 4ttp3DDiie.%ing.edu.uyDW(agon.arDgcc9maReDgcc.4tm

También podría gustarte