Como fue mencionado al principio, el lenguaje C se desarrolló para tener un lenguaje de alto nivel en el que se pudiera programar el Sistema Operativo UNIX. Por lo mismo, los programas en C constan de uno o más ficheros con procedimientos y declaraciones. Estos ficheros se pueden compilar por separado, generándose ficheros objeto independientes, que el montador (o linker) de enlaces ha de combinar para generar el programa ejecutable. La automatización de este proceso se realiza mediante una herramienta que dependerá del sistema en el que se realice la aplicación.
En UNIX, esta herramienta es (make). Los ficheros de las aplicaciones codificadas en C se dividen en dos tipos, según su nombre acabe en: c o en .h. Los ficheros .c contienen la implementación del módulo y los .h (cabeceras o header) contienen la información sintáctica y semántica sobre el uso de la interfase del módulo. Los ficheros .h pueden ser dependientes de la aplicación o propios del sistema operativo. Contienen un bloque de comentarios, sentencias de inclusión de otros ficheros .h, definiciones de constantes y tipos, y declaraciones de funciones. Debe recordarse eso si de que no se permite declarar variables en un fichero .h.
En toda aplicación existe además un módulo principal, que es el que define la función main. En este sistema existen varias funciones main, debido a que cada una se corresponde con la ejecución de un programa, es decir, un proceso del sistema. Ligado a lo anterior, se corresponderá ahora a explicar el funcionamiento del compilador de C en UNIX, el cual es utilizado para la obtención de los ficheros ejecutables necesarios para el funcionamiento de la parte práctica del sistema. La función de este compilador no es sólo traducir programas en lenguajes de alto nivel a código máquina para que sean ejecutados en una computadora específica. Este compilador además proporciona un entorno de ejecución adecuado en el que se pueden llevar acabo operaciones de entrada/salida, acceso a ficheros y a otras interfaces del sistema operativo. En el sistema operativo UNIX, el comando utilizado para compilar programas en C es cc. Este proceso de compilación consta de 5 fases:
1)Preprocesamiento: es realizado por el programa cpp (preprocesador de C). Maneja definiciones de constantes, inclusión de ficheros, gestión de macros, compilación condicional, etc.
2)Compilación: tomando como entrada los resultados de la fase anterior, el programa ccom realiza chequeos sintácticos, el parsing, y la generación del código ensamblador.
3)Optimización: es opcional. Proporciona al generador de código una mayor velocidad.
4)Ensamblado: el programa ensamblador asm se utiliza para crear un fichero objeto que contiene código binario y genera la información que va a ser utilizada por el linker/cargador.
5)Cargado: el programa de cargado constituye un linker/cargador. Combina todos los ficheros objetos y enlaza (o linca) éste a todas las subrutinas de librerías necesarias para producir un programa ejecutable.
El comando cc se encarga de tomar un fichero .c como entrada, generando el correspondiente fichero .o (objeto). A partir de un fichero .s o ensamblado, se produce este fichero .o. luego, este fichero .o se convierte en un fichero ejecutable. Si esta compilación se realiza en un solo paso, entonces el fichero .o se borra automáticamente.
No hay comentarios:
Publicar un comentario