C/Compilación
En Wikibooks, o Galilibros en galego.
| C | ||
| ← Volver a Ola mundo | Compilación | Seguir con Estrutura e estilo → |
Unha vez aprendidos os conceptos básicos de compilación no capítulo en que falabamos de como compilar un programa, toca adentrarse de cheo no proceso.
Coma calquera outra linguaxe de programación, C é por si mesma incomprensible para un microprocesador. O seu propósito é o de proporcionar un modo intuitivo ás persoas para dar instrucións que poden converterse facilmente a código máquina, algo que si é comprensible para o microprocesador. O compilador é o encargado desta "tradución".
Para aqueles que sexan novos nisto da programación, isto semella bastante doado. Un compilador nativo pode ler calquera ficheiro fonte, traducir todo o seu contido a código máquina, e crear un executable. Isto podería funcionar, mais conta con dous serios problemas. O primeiro é que, para un proxecto longo, a computadora podería non ter memoria abondo para ler todo o ficheiro fonte e traducilo dunha soa vez. A segunda é que, se fas un cambio nun ficheiro fonte, sería preferible non ter que volver compilar todo o programa.
Para solucionar estes problemas, os compiladores realizan o seu traballo en dous pasos. Para cada ficheiro fonte (cada ficheiro .c), o compilador le os ficheiros a que éste fai referencia co #include, e tradúceo a código máquina. O resultado disto é un ficheiro obxecto (.o). Unha vez feitos todos os ficheiros obxecto, un "ligador" recólleos todos e escribe o programa. Deste xeito, se cambias un dos ficheiros fonte, só ese ficheiro necesitar volver ser compilado e entón o programa ten que volver ser ligado.
Sen meternos en detalles, pode ser beneficioso ter un coñecemento a groso modo do proceso de compilación:
Índice |
[editar] Preprocesador
Moitas veces necesitarás darlle instrucións especiais ao teu compilador. Isto faise introducindo "directivas de preprocesador" no teu código. Cando comezas a compilar o teu código, un subprograma chamado preprocesador revisa o código fonte e realiza unha substitución simple de cadeas de acordo cunhas regras predeterminadas.
En linguaxe C, todas as directivas de preprocesador comezan coa almofada (#). Podes observar unha directiva de preprocesador no Ola mundo: #include.
#include<stdio.h>
Isto substituiría #include polo verdadeiro código fonte do ficheiro <stdio.h>. Entre o resto das directivas están as configuracións e macros do compilador #pragma. O resultado da fase de preprocesamento é unha cadea de caracteres.
Algo a recordar é que estas directivas non se compilan coma parte do código fonte.
[editar] Comprobación da sintaxe
Este paso comproba que o código é válido e dará lugar a un programa executable.
[editar] Código obxecto
O compilador produce un código máquina equivalente ao código fonte que pode ligarse ao programa final.
[editar] Ligado
O ligado combina os códigos obxecto separados nun programa completo integrando as bibliotecas e o código e producindo un programa executable ou unha biblioteca. O proceso de ligado lévao a cabo un ligador, que adoita ser parte do compilador.
[editar] Un só sentido
É importante ter en conta, tras tratar os conceptos básicos do proceso de compilación, que esta é un proceso dun só sentido. É dicir, é doado compilar un ficheiro fonte en C e transformalo así en código máquina, pero "descompilalo" (converter o código máquina no código C que o creou) non o é. Existen programas que realizan este proceso, coñecido coma enxeñaría inversa, e hai algúns para C, pero raramente crean un código útil.
| C | ||
| ← Volver a Ola mundo | Compilación | Seguir con Estrutura e estilo → |