PDF de programación - El proceso de compilación

Imágen de pdf El proceso de compilación

El proceso de compilacióngráfica de visualizaciones

Publicado el 22 de Mayo del 2019
927 visualizaciones desde el 22 de Mayo del 2019
1,5 MB
20 paginas
Creado hace 14a (14/07/2009)
11

El proceso de compilación

Objetivos

• Entender como es el proceso
de compilación, el proceso de
traducción de un código fuente
a lenguaje maquina, para que
pueda ser ejecutado por la
computadora u ordenador.

• Conocer las etapas más impor-
tantes de la compilación (pre-
procesamiento, generación de
código y enlace).

• Aprender a automatizar la com-

pilación, técnica que se torna
relevante cuando los proyectos
son de gran envergadura.

Contenido

11.1 Introducción ....................................................292
11.2 El proceso de compilación ..............................292
11.3 Preprocesamiento ...........................................292
11.4 Compilación ....................................................296
11.5 Enlace ..............................................................297
11.6 Automatización del proceso de compilación .298
11.7 Resumen ..........................................................301
11.8 Problemas resueltos ........................................302
11.9 Contenido de la página Web de apoyo ..........306

292

11 - El proceso de compilación

En la página Web de apoyo
encontrará un breve comen-
tario del autor sobre este

capítulo.

11.1 Introducción.

En este punto del libro se espera que el lector haya incorporado los conceptos funda-
mentales que le permitan desarrollar algoritmos correctos para la resolución de problemas.
Por eso es que nos permitiremos ver con mayor detalle temas relacionados con el ambiente
de desarrollo para la implementación y la compilación de algoritmos. En particular, será de
interés analizar por separado las etapas más importantes que comprenden el proceso de
compilación (preprocesamiento, generación de código y enlace), y también se presentará
una forma de automatizar ese proceso (mediante la herramienta make), en especial cuando
los proyectos adquieren tamaños considerables e involucran varios archivos fuente, de ca-
becera o bibliotecas.

11.2 El proceso de compilación.

En el ámbito de las computadoras, los algoritmos se expresan mediante lenguajes de progra-
mación, como C, Pascal, Fortran o Java (entre muchos otros). Sin embargo, esta representación
no es suficiente, ya que el microprocesador necesita una expresión mucho más detallada del
algoritmo, que especifique en forma explícita todas las señales eléctricas que involucra cada
operación. La tarea de traducción de un programa desde un lenguaje de programación de alto
nivel hasta el lenguaje de máquina se denomina compilación, y la herramienta encargada de ello
es el compilador. En la figura siguiente se pueden distinguir las etapas más importantes:

Código fuente

Preprocesamiento

Generación de

código

Objeto

Enlace

Programa
ejecutable

Lenguaje de
alto nivel

Compilación

Objeto
externo

Lenguaje de

máquina



Fig. 11-1. Etapas más importantes de compilación.

A continuación se tratarán estas etapas de manera más extensa, con mayor atención en la

primera de ellas: El preprocesamiento.

11.3 Preprocesamiento.

La primera etapa del proceso de compilación se conoce como preprocesamiento. En oca-
siones a esta etapa ni siquiera se la considera parte de la compilación, ya que es una traduc-
ción previa y básica que tiene como finalidad “acomodar” el código fuente antes de que éste
sea procesado por el compilador en sí. En este libro no haremos esa distinción.

El preprocesador modifica el código fuente según las directivas que haya escrito el pro-
gramador. En el caso del lenguaje C, estas directivas se reconocen en el código fuente porque
comienzan con el carácter #, y se utilizaron en gran medida a lo largo de este libro (por ejemplo,
#define… o #include…). A continuación, veremos algunas de ellas:

#define, #undef, #error, #include, #if, #ifdef, #ifndef, #else,
#endif, #pragma.

Alfaomega

Análisis y diseño de algoritmos - López, Jeder, Vega

293

11.3 Preprocesamiento

11.3.1 Directivas #define #undef.

#define <nombre macro>
#undef <nombre identificador>

<expansión de la macro>

La directiva #define crea un identificador con nombre <nombre macro> y una cadena
de sustitución de ese identificador. Cada vez que el preprocesador encuentre el identificador
de la macro, realizará la sustitución de éste por la cadena de sustitución. Esta última termina
con un salto de línea. Cuando la cadena ocupa más de una línea, se utiliza la barra invertida
para indicarle al compilador que omita el salto de línea. Algunos ejemplos:

#define MAX_PILA
#define VAL_ABS(a) ((a) < 0 ? –(a) : (a))

100

Por su parte, #undef elimina valores definidos por #define.

11.3.2 Directiva #error.

#error <mensaje de error>

Esta directiva fuerza al compilador a detener la compilación del programa. El mensaje de

error no va entre comillas.

11.3.3 Directiva #include.

#include "archivo de cabecera"
#include <archivo de cabecera>

Esta directiva indica al preprocesador que incluya el archivo de cabecera indicado. Los
archivos incluidos, a su vez, pueden tener directivas #include. Si el nombre del archivo está
entre llaves < y > significa que se encuentra en alguno de los directorios que almacenan archi-
vos de cabecera (los estándares del compilador y los especificados con la opción -I cuando se
ejecuta la compilación). En el otro caso, significa que el archivo que se ha de incluir se encuen-
tra en el directorio actual de trabajo (el directorio a partir del cual se ejecuta el compilador).

11.3.4 Directivas #if #ifdef #ifndef #else #endif.

#if <expresión constante>
<secuencia de sentencias>
#endif

#ifdef <identificador>
<secuencia de sentencias>
#endif

#ifndef <identificador>
<secuencia de sentencias>
#endif

Análisis y diseño de algoritmos - López, Jeder, Vega

Alfaomega

294

11 - El proceso de compilación

Estas directivas permiten incluir o excluir condicionalmente partes del código durante la
compilación. Si <expresión constante> es verdadera, se compila el código encerrado
entre #if y #endif; en caso contrario, se ignora ese código.

En el segundo caso, si <identificador> está definido (por ejemplo, usando la directiva

#define), entonces el código encerrado entre #ifdef y #endif es compilado.

En el tercer caso, si <identificador> no está definido, entonces el código encerrado

entre #ifndef y #endif es compilado.

La directiva #else establece una alternativa:

#if <expresión constante>
<secuencia de sentencias 1>
#else
<secuencia de sentencias 2>
#endif

11.3.5 Directiva #pragma.

#pragma <nombre directiva>

Un pragma es una directiva que permite proveer información adicional al compilador.
Depende del compilador utilizado y de la arquitectura donde se ejecutará la aplicación com-
pilada.

En el caso de Pascal, el preprocesamiento también está gobernado a partir de un con-
junto de directivas, de las cuales se detallarán sólo las que se utilizan con mayor frecuen-
cia. A diferencia de C, una directiva en Pascal se define con la sintaxis {$ … }. Algunas
de ellas:

{$define}, {$undef}, {$ifdef }, {$else}, {$endif}, {$I}

11.3.6 Directivas {$define} {$undef}.

{$define <nombre identificador>}
{$undef <nombre identificador>}

Al igual que en el caso de C, las directivas {$define} y {$undef} en Pascal permiten
definir y eliminar la definición de un identificador, respectivamente. A diferencia de C, no
todos los compiladores permiten definir macros (un identificador con una cadena de susti-
tución asociada, que será reemplazada cada vez que se encuentre una ocurrencia del iden-
tificador).

11.3.7 Directivas{$ifdef} {$else} {$endif}.

{$ifdef <identificador>}
<secuencia de sentencias 1>
{$else}
<secuencia de sentencias 2>
{$endif}

Alfaomega

Análisis y diseño de algoritmos - López, Jeder, Vega

11.3 Preprocesamiento

295

La compilación condicional de código en Pascal está soportada mediante las directivas
{$ifdef }, {$else} y {$endif}. En el ejemplo siguiente se cargan dos números de punto
flotante y, en función de si el identificador DOBLE_PRECISION está definido o no, se computa
su suma en precisión doble o simple:

program ejemplo;
{$define DOBLE_PRECISION}
{$ifdef DOBLE_PRECISION}
var num1, num2, resultado: double;
{$else}
var num1, num2, resultado: real;
{$endif}

begin

{$ifdef DOBLE_PRECISION}
writeln('Ingrese dos números de precisión doble:');
{$else}
writeln('Ingrese dos números de precisión simple:');
{$endif}

readln(num1);
readln(num2);

resultado := num1 + num2;

{$ifdef DOBLE_PRECISION}
writeln(num1:6:4, ' + ', num2:6:4, ' = ', resultado:6:4);
{$else}
writeln(num1:6:2, ' + ', num2:6:2, ' = ', resultado:6:2);
{$endif}

end.

11.3.8 Directiva {$I}.

{$I+} / {$I-}
{$I <nombre de archivo>}

La directiva {$I} tiene dos usos. En el primer caso, cuando se la acompaña de los mo-
dificadores + y -, permite habilitar e inhabilitar la comprobación de errores de entrada/salida,
respectivamente. Su uso ya se explicó en el capítulo 7, ya que está estrechamente ligado al
manejo de archivos. En el ejemplo siguiente se escribe sobre un archivo de texto. Para evitar
que el programa se interrumpa con un error en la llamada a append() en caso de que el
archivo no exista, se utilizan las directivas {$I-} y {$I+}, y se verifica el contenido de la
variable predefinida ioresult (si su valor es distinto de 0, significa que se produjo un error
en la última operación de entrada/salida).

Análisis y diseño de algoritmos - López, Jeder, Vega

Alfaomega

296

11 - El proceso de compilación

program ejemplo;

var archivo: text;

begin
assign(archivo, 'mi_archivo.txt');
{$I-}
append(archivo);
{$I+}
if (ioresult <> 0) then
rewrite(archivo);





close(archivo);

end.

Con esta introducción se cubren los aspectos relacionados al preprocesamiento. La etapa

que sigue, la compilación en sí, se explicará a grandes rasgos a continuación.

11. 4 Compilación.

La compilación es el pro
  • Links de descarga
http://lwp-l.com/pdf15971

Comentarios de: El proceso de compilación (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad