Compilación de un programa C – Detrás de la escena
Un Preprocesador es un software de sistema (un programa informático que está diseñado para ejecutarse en el hardware del ordenador y los programas de aplicación). Realiza el preprocesamiento del lenguaje de alto nivel (HLL). El preprocesamiento es el primer paso del sistema de procesamiento del lenguaje. El sistema de procesamiento del lenguaje traduce el lenguaje de alto nivel a lenguaje de nivel de máquina o código de máquina absoluto (es decir, a la forma que puede ser entendida por la máquina).
- El preprocesador no conoce las reglas de alcance de C. Las directivas del preprocesador como #define entran en vigor tan pronto como se ven y permanecen en efecto hasta el final del archivo que las contiene; la estructura de bloques del programa es irrelevante.
Un preprocesador realiza principalmente tres tareas sobre el código HLL :
- Eliminar comentarios : Elimina todos los comentarios. Un comentario se escribe sólo para que los humanos entiendan el código. Por lo tanto, es obvio que no son de ninguna utilidad para una máquina. Por lo tanto, el preprocesador elimina todos ellos ya que no son necesarios en la ejecución y no serán ejecutados también.
Así es como se ve un archivo con comentarios eliminados en linux) :
Escriba un código C (que el nombre del archivo sea prog.c). Preprocésalo usando el comando gcc -E prog.c
Verás la salida con el código sin comentarios.
Este archivo se guarda con una extensión ‘.i’ (prog.i) que será la entrada al compilador. - Inclusión de archivos : Incluir todos los archivos de la biblioteca que nuestro programa necesita. En HLL escribimos #include que es una directiva para el preprocesador que le indica que incluya el contenido del archivo de biblioteca especificado. Por ejemplo, #include le dirá al preprocesador que incluya todo el contenido del archivo de biblioteca stdio.h.
También se puede escribir usando comillas dobles – #include «stdio.h»
Nota: Si el nombre del archivo está encerrado entre corchetes angulares, el archivo se busca en las rutas de inclusión estándar del compilador. Si el nombre del archivo está encerrado entre comillas dobles, la ruta de búsqueda se expande para incluir el directorio fuente actual. - Expansión de macros : Las macros pueden ser llamadas como pequeñas funciones que no son tan sobrecargadas para procesar. Si tenemos que escribir una función (con una pequeña definición) que necesita ser llamada recursivamente (una y otra vez), entonces deberíamos preferir una macro en lugar de una función.
Así, la definición de estas macros se hace mediante el preprocesador.#define SI 1000
es un ejemplo sencillo de una macro.
- Hay dos tipos de macros: De tipo objeto (no toman parámetros) y de tipo función (Pueden tomar parámetros)
// object-like macro#define // function-like macro #define ()
- Se puede eliminar una definición de macro con #undef:
// delete the macro# undef
- Podemos escribir macro de varias líneas igual que la función, pero cada declaración termina con «\N».
#include <stdio.h>
#define MACRO(num, str) {\
printf
(
"%d"
, num);\
printf
(
" is"
);\
printf
(
" %s number"
, str);\
printf
(
"\n"
);\
}
- Hay dos tipos de macros: De tipo objeto (no toman parámetros) y de tipo función (Pueden tomar parámetros)
Este artículo ha sido escrito por Diksha. Si te gusta GeeksforGeeks y quieres contribuir, también puedes escribir un artículo en contribute.geeksforgeeks.org o enviarlo por correo a [email protected]. Verás tu artículo en la página principal de GeeksforGeeks y ayudarás a otros Geeks.