Proceso de compilación en c
¿Qué es una compilación?
La compilación es un proceso de conversión del código fuente en código objeto. Se hace con la ayuda del compilador. El compilador comprueba el código fuente en busca de errores sintácticos o estructurales, y si el código fuente está libre de errores, genera el código objeto.
El proceso de compilación en c convierte el código fuente tomado como entrada en el código objeto o código máquina. El proceso de compilación se puede dividir en cuatro pasos, es decir,, Preprocesamiento, Compilación, Ensamblaje y Enlace.
El preprocesador toma el código fuente como entrada y elimina todos los comentarios del código fuente. El preprocesador toma la directiva del preprocesador y la interpreta. Por ejemplo, si < stdio.h>, la directiva está disponible en el programa, luego el preprocesador interpreta la directiva y reemplaza esta directiva con el contenido del ‘ stdio.archivo h.
Las siguientes son las fases por las que pasa nuestro programa antes de ser transformado en una forma ejecutable:
- Preprocesador
- Compilador
- Ensamblador
- Enlazador
Preprocesador
El código fuente es el código que está escrito en un editor de texto el archivo de código tiene una extensión “.c”. Este código fuente se pasa primero al preprocesador, y luego el preprocesador expande este código. Después de expandir el código, el código expandido se pasa al compilador.
Compilador
El código expandido por el preprocesador se pasa al compilador. El compilador convierte este código en código ensamblador. O podemos decir que el compilador de C convierte el código preprocesado en código ensamblador.
Ensamblador
El código ensamblador se convierte en código objeto utilizando un ensamblador. El nombre del archivo objeto generado por el ensamblador es el mismo que el archivo de origen. La extensión del archivo objeto en DOS es ‘.obj’, y en UNIX, la extensión es “o”. Si el nombre del archivo fuente es ‘hola.c’, entonces el nombre del archivo objeto sería ‘ hola.obj’.
Enlazador
Principalmente, todos los programas escritos en C usan funciones de biblioteca. Estas funciones de biblioteca están precompiladas, y el código objeto de estos archivos de biblioteca se almacena con ‘.lib’ (o ‘.a’) extensión. El trabajo principal del enlazador es combinar el código objeto de los archivos de la biblioteca con el código objeto de nuestro programa. A veces la situación surge cuando nuestro programa se refiere a las funciones definidas en otros archivos; entonces el enlazador juega un papel muy importante en esto. Vincula el código objeto de estos archivos a nuestro programa. Por lo tanto, concluimos que el trabajo del enlazador es vincular el código objeto de nuestro programa con el código objeto de los archivos de la biblioteca y otros archivos. La salida del enlazador es el archivo ejecutable. El nombre del archivo ejecutable es el mismo que el archivo de origen, pero solo difiere en sus extensiones. En DOS, la extensión del archivo ejecutable es ‘.exe’, y en UNIX, el archivo ejecutable se puede nombrar como ‘a. out’. Por ejemplo, si estamos usando la función printf () en un programa, entonces el enlazador agrega su código asociado en un archivo de salida.
Entendamos a través de un ejemplo.
hola.c
Ahora, crearemos un diagrama de flujo del programa anterior:
En el diagrama de flujo anterior, se toman los siguientes pasos para ejecutar un programa:
- En primer lugar, el archivo de entrada, es decir, hola.c, se pasa al preprocesador, y el preprocesador convierte el código fuente en código fuente expandido. La extensión del código fuente expandido sería hello.i.
- El código fuente expandido se pasa al compilador, y el compilador convierte este código fuente expandido en código ensamblador. La extensión del código de ensamblaje sería hello.s.
- Este código ensamblador se envía al ensamblador, que convierte el código ensamblador en código objeto.
- Después de la creación de un código objeto, el enlazador crea el archivo ejecutable. El cargador cargará el archivo ejecutable para la ejecución.