les étapes de compilation en langage c

Post on 05-Jul-2015

267 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Les étapes de compilation en langage C programmation en c

TRANSCRIPT

La compilation en langage C

Préparé par Ahmed Abdellaoui

Introduction

• L’objectif d’un programmeur c’est d’arriver à générer (puis exécuter) un fichier exécutable. Ceci passe par plusieurs étapes que nous allons décrire dans le cas d’un programme en langage C .

Introduction

• 1. la première étape consiste à écrire le programme (on parle de source) dans un fichier texte à l’aide d’un éditeur.

En C, on donne l’extension .c à ce fichier.Ce programme est bien évidemment incompréhensible par la machine ;

• 2. la deuxième étape est l’étape de précompilation. Elle consiste à traiter les directives de compilation (comme l’inclusion de fichiers d’entête de bibliothèques) et génère

un fichier texte qui est encore un fichier source en C;

Introduction• 3. l’étape suivante est la compilation. Elle consiste à

transformer les instructions du programme en langage compréhensible par le processeur (langage machine) et génère un fichier binaire dit fichier objet ; Dans certains documents les deuxième et troisième étapes ne forment qu’une seule étape et sont assimilées à la compilation ;

• 4. la dernière étape consiste à é ectuer l’édition de liens. ffLe code généré à la compilation est complété par le code des fonctions des bibliothèques utilisées.C’est seulement après cette étape que l’on génère un fichier exécutable.

Définition

• un compilateur est un programme qui lit en entrée un programme écrit dans un premier langage (appelé langage source) et le traduit en un programme équivalent écrit dans un autre langage (appelé langage cible). Au cours de ce processus de traduction, le compilateur tentera également de repérer et de signaler les erreurs évidentes commises par le programmeur.

Fichier source et exécutable

• Un fichier peut être défini comme une entité regroupant un ensemble d’informations,stocké sur un support physique (disque par exemple) et manipulable grâce à un système d’exploitation.On distingue di érents type de fffichiers :

Fichier source et exécutable• – des fichiers exécutables (applications) : un fichier exécutable

contient du code directement interprétable et exécutable par le processeur. Sous dos, ces fichiers prennent l’extension .exe ou .com. Sous UNIX c’est une propriété donnée au fichier qui indique au système qu’il s’agit d’un exécutable.

• – des fichiers binaires : ils contiennent du code machine mais ne sont pas directement exécutables : ce sont des fichiers objets.

• – des fichiers texte (ASCII) 9 : ces fichiers contiennent uniquement des codes dit ASCII (codés sur 7 bits). C’est le type de fichiers le plus portable.

• – des fichiers liés à une application particulière : fichiers musicaux (mp3, waw,...)images (jpeg, gif, tif, png, etc...), vidéo, traitement de texte (doc, wpd ...).

les fichiers sources C

• – les fichiers d’en-tête, qui contiennent les déclarations des symboles du programme ;

• – les fichiers C, qui contiennent leurs définitions.

Schéma simplifié d’un compilateur.

What time is it ? Compilateur

Quelle heure est-il ?

Phases d’un compilateur

Compilation en C

• C est un langage compilé langage interprété

programme C décrit par un fichier texte appelé fichier source (*.c) traduit en langage machine par un compilateur

• La compilation se décompose en 4 phases: – traitement par le préprocesseur– la compilation– l ’assemblage– l ’édition de liens

Les phases de compilation

• Traitement par le préprocesseur : réalise des transformations d ’ordre purement textuel (inclusion d ’autres fichiers sources, etc.) (*.i)

• Compilation : traduit le fichier généré par le préprocesseur en assembleur (*.s)

• Assemblage : transforme le code assembleur en fichier binaire appelé fichier objet (*.o)

• Edition de liens : lie entre différent objet (sources de fichiers séparés) pour produire un fichier exécutable.

Les phases de compilation

• Pour compiler un programme, on n’a donc réellement besoin que de trois types de fichiers :

• les fichiers de déclaration du système et des bibliothèques de base ;

• les fichiers des bibliothèques de base eux-mêmes ;• les fichiers source (de déclaration et de définition) du

programme à compiler.

• En C, les fichiers sources de déclaration portent l’extension .h, et les fichiers de définition portent l’extension .c pour les programmes écrits en C.

Les assembleurs

• Dans un assembleur, on utilise le langage de la machine.

• Un code assembleur utilise des noms au lieu de codes binaires pour désigner les opérations et les adresses mémoires.

• Exemple : le code assembleur de l’instruction b:=a+2; peut être :MOV a, R1ADD #2, R1MOV R1, b

Les éditeurs de liens (linkers)

• Permettent de construire un programme unique à partir de plusieurs fichiers contenant du code machine directement exécutable.

• Ces fichiers peuvent avoir été produits par plusieurs compilations séparées, et un ou plusieurs d’entre eux peuvent être des fichiers ou des routines de bibliothèque, fournis par le système et disponibles pour tout programme qui en a besoin.

Principe de la compilation séparée

Compilation

Édition des liens

Module M1(M1.h et M1.c)

Module M2(M2.h et M2.c)

... Fichiermain.c

Fichier objetM1.o

Fichier objet M2.o

... Fichier objet main.o

Exécutable

Bibliothèques externes

Exemple

Caractéristiques d’un bon compilateur

• Le code produit est correct (équivalence entre code source et code cible).

• Le code produit est rapide.• Le temps de réponse du compilateur est rapide.• Les messages d’erreurs sont précis (nature d’erreur,

indication de la place de l’erreur dans le fichier).• Débogueur offert.• Nombre de passe réduit.• Le code produit est optimisé (en temps et en

espace).

Merci pour votre attention

top related