Page 48 - LENGUAJES FORMALES AUTOMATAS Y COMPILADOS
P. 48

48


                                          INVESTIGACIÓN: COMPILADOR DE C

                  C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell
                  de AT&T como evolución del anterior lenguaje B, a su vez basado en BCPL.
                  A  la  hora  de  programar  no  creamos  un  único  archivo  C.c,  sino  varios  archivos  conteniendo
                  diferentes funciones del programa. Esto nos proporciona varias ventajas: una mejor organización
                  del código, una mejor modularidad y sobre todo, más facilidad (y velocidad) a la hora de compilar.

                  El proceso de compilación que hemos tratado hasta ahora se divide en realidad en dos etapas, que
                  el compilador nos esconde en una: compilación propiamente dicha  y enlazado. En la primera
                  etapa, la de compilación, nuestro código en C se transforma en código objeto, es decir, código
                  máquina  (instrucciones  que  el  ordenador  puede  ejecutar)  en  ficheros  .o,  mientras  que  en  la
                  segunda  etapa  (enlazado)  estos  ficheros  objeto  son  unidos  entre  sí  para  formar  el  fichero
                  ejecutable (normalmente sin extensión en el mundo Unix, o con extensión .com o .exe en el
                  mundo MS-DOS/Windows).

                    Pasos de compilación:


                  Para  compilar  programas  escritos  en  C,  disponen  de  un  compilador  de  nombre cc.  Este
                  compilador toma como parámetros los ficheros fuentes de que consta el programa final y, tras una
                  serie de pasos, produce un fichero ejecutable. Si durante la compilación se produce un error, no
                  se genera el ejecutable.

                  Los pasos de compilación en UNIX son al menos estos tres:


                      1-  Pre proceso (macros, inclusión de ficheros...)
                      2-  Compilación a objeto
                      3-  Enlace (linking) de objetos y bibliotecas


                  El  preproceso  interpreta  las  macros  creadas  con #define y  expande  los  ficheros  para  incluir
                  con #include.

                  Un fichero una vez preprocesado se compila a código máquina, pero no se genera un ejecutable,
                  sino un fichero objeto. Este estadio intermedio es necesario por muchos motivos, entre ellos que
                  las rutinas de biblioteca, como printf, tienen que ser "empotradas" posteriormente para generar
                  un ejecutable, y en general debido a que un programa en C puede constar de varios ficheros
                  compilados por separado.

                  Por eso existe un último paso, denominado enlace (linking en inglés), en el cual se recogen todos
                  los ficheros objetos más las bibliotecas (que también residen en ficheros) necesarios para producir
                  el fichero ejecutable.

                    Convenciones en los nombres de ficheros:


                  Como se ha visto, en el transcurso de la ejecución del cc aparecen en escena varias clases de
                  ficheros: fuentes, objetos, bibliotecas, ejecutables. El compilador de C es capaz de distinguir la
                  clase de un fichero en base a sus últimos caracteres. La siguiente tabla muestra las convenciones
                  más habituales.
   43   44   45   46   47   48   49   50   51   52   53