C/Compilación

En Wikibooks, o Galilibros en galego.

< C
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


Ferramentas personais