0% encontró este documento útil (0 votos)
84 vistas5 páginas

Tarea2 COMPI

UNAM, Compiladores, Profesora Elba Karen Saenz Garcia, Tarea 02
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
84 vistas5 páginas

Tarea2 COMPI

UNAM, Compiladores, Profesora Elba Karen Saenz Garcia, Tarea 02
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Compiladores

Mora Ortega Judith

Tarea 2

Menciona qué directivas del prepocesador de C son las que integran archivos y ejecuta
sustituciones macro.

Integración de archivos

• #include: Esta directiva es la más común y se utiliza para incluir el contenido de


otro archivo en el archivo actual. Puede ser utilizado para incluir archivos de
cabecera (.h) que contienen declaraciones de funciones, estructuras y macros, o
para incluir otros archivos de código fuente.

o Forma general: #include "nombre_archivo" (comillas dobles para archivos


locales) o #include <nombre_archivo> (angostos para archivos del
sistema).

Sustituciones macro

• #define: Esta directiva se utiliza para definir macros, que son simplemente alias
para valores o expresiones. Los macros pueden ser simples sustituciones de texto
o macros con parámetros.

o Macro simple: #define PI 3.14159 (define PI como 3.14159)

o Macro con parámetros: #define CUADRADO(x) (x*x) (define una macro


para calcular el cuadrado de un número)

Otras directivas relevantes

Aunque no se utilizan directamente para integrar archivos o realizar sustituciones macro,


hay otras directivas que pueden ser útiles en combinación con estas:

• #ifdef, #ifndef, #else, #endif: Estas directivas se utilizan para la compilación


condicional, permitiendo incluir o excluir secciones de código en función de si
una macro está definida o no.

• #pragma: Esta directiva se utiliza para proporcionar instrucciones al compilador.


Existen diferentes pragmas que pueden afectar la forma en que el compilador
procesa el código.

¿Qué comando se utiliza en Linux para solamente pre-procesador un programa escrito


en C y genere un programa en C sin directivos al preprocesador?

Para preprocesar un programa C en Linux y obtener un archivo sin las directivas del
preprocesador, utilizamos el comando cpp.

¿Qué hace cpp?


Compiladores
Mora Ortega Judith

• Expande macros: Reemplaza las macros definidas con sus valores


correspondientes.

• Incluye archivos de cabecera: Inserta el contenido de los archivos incluidos con


#include.

• Realiza operaciones condicionales: Evalúa directivas como #ifdef, #ifndef, #else,


#endif y ejecuta o omite secciones de código en función del resultado.

• Elimina comentarios: Quita todos los comentarios del código.

Sintaxis básica

cpp archivo.c > archivo.i

• archivo.c: Es el archivo de entrada que contiene el código C.

• archivo.i: Es el archivo de salida que contendrá el código después de ser


preprocesado.

Ejemplo

Si tienes un archivo llamado miprograma.c y quieres generar el archivo preprocesado


miprograma.i, ejecutarías el siguiente comando:

cpp miprograma.c > miprograma.i

Opciones útiles

• -E: Indica al preprocesador que se detenga después de la fase de


preprocesamiento y envíe la salida al archivo especificado.

• -P: Similar a -E, pero también elimina las directivas #line que se añaden para
rastrear la ubicación original del código.

• -C: Conserva los comentarios en la salida.

• -Dmacro=valor: Define una macro antes de que comience el preprocesamiento.

Menciona qué comando se utiliza en Linux para que un programa escrito en C genere
un programa en ensablador y se pueda editar o ver

Proceso de Compilación Típico

1. Preprocesamiento: El preprocesador (generalmente cpp) expande macros,


incluye archivos de cabecera y realiza otras operaciones previas a la compilación.
Compiladores
Mora Ortega Judith

2. Compilación: El compilador (como gcc) traduce el código C preprocesado a


lenguaje ensamblador.

3. Ensamblado: El ensamblador (como as) convierte el código ensamblador en


código objeto (un archivo .o).

4. Enlazado: El enlazador (como ld) combina varios archivos objeto y bibliotecas


para crear un ejecutable.

Utilizando gcc con la opción -S:

-S: Indica al compilador que se detenga después de la fase de ensamblado y genere un


archivo de salida en formato ensamblador.

miprograma.c: Es el archivo fuente en C.

miprograma.s: Será el archivo generado con el código ensamblador.

Programa

gcc -S hola.c -o hola.s

Refiriendo se al lenguaje de programación C, ¿en qué lenguaje están escritos los


archivos de cabecera (por ejemplo stdio.h, math.h)?

Los archivos de cabecera son incluidos en archivos C, en realidad son archivos de texto
que contienen código C válido, pero con un propósito específico: proporcionar
información al compilador sobre las entidades que se utilizarán en el programa.

¿Porqué se les llama de cabecera (header)?

Contienen la información inicial y esencial que el compilador necesita para procesar el


código.

¿Los puedes editar? Haz la prueba de editar alguno.

Si. Los archivos de cabecera son archivos de texto plano, por lo que pueden ser editados
con cualquier editor de texto.

Supongamos que tienes un archivo de cabecera llamado mi_cabecera.h con la siguiente


declaración:

#ifndef MI_CABECERA_H

#define MI_CABECERA_H

int sumar(int a, int b);


Compiladores
Mora Ortega Judith

#endif

Para agregar una nueva función llamada restar, editarías el archivo de la siguiente
manera:

#ifndef MI_CABECERA_H

#define MI_CABECERA_H

int sumar(int a, int b);

int restar(int a, int b);

#endif

Las funciones de la biblioteca estándar del lenguaje C, ¿qué lenguaje es el código que
contiene?

Las funciones de la biblioteca estándar de C están escritas principalmente en lenguaje C.


Esto significa que el código fuente de estas funciones utiliza la sintaxis y las estructuras
del lenguaje C. Sin embargo, es posible que algunas partes de estas bibliotecas,
especialmente las relacionadas con operaciones de bajo nivel o con el sistema operativo,
estén escritas en ensamblador para optimizar el rendimiento.

¿por qué cuando se usa la biblioteca matemática de C tienes que usar #include math.h
en el programa fuente y también enlazarlo con -Im?

Al programar en C, es común utilizar funciones matemáticas proporcionadas por la


biblioteca matemática de C. Para acceder a estas funciones, es necesario realizar dos
pasos:

1. Incluir el archivo de cabecera:

o #include <math.h>: Esta directiva preprocesadora le indica al compilador


que incluya el contenido del archivo math.h. Este archivo contiene las
declaraciones de las funciones matemáticas que se encuentran en la
biblioteca matemática. Al incluir este archivo, el compilador sabe cómo
utilizar estas funciones en tu código.

2. Enlazar la biblioteca:

o -lm: Esta opción del compilador (por ejemplo, gcc) le indica al enlazador
que enlace tu programa con la biblioteca matemática. La biblioteca
Compiladores
Mora Ortega Judith

matemática contiene el código real de las funciones que has declarado en


tu programa.

Un programa escrito en C que no contenga la función main, ¿se puede compilar? NO

¿puede obtener el ejecutable? NO

¿Por qué?

La función main es el punto de entrada de cualquier programa en C. Es desde aquí que


el flujo de ejecución comienza. El compilador busca específicamente esta función para
determinar dónde iniciar la ejecución del programa. Sin ella, el compilador no tiene un
punto de partida definido y, por lo tanto, no puede generar un ejecutable válido.

También podría gustarte