Vous êtes sur la page 1sur 20

Langage C

Dr El Hadji Bassirou TOURE


Ecole Supérieure Polytechnique (DGI-ESP-UCAD)
2021 - 2022
Dr. E_H_B. TOURE / Cours de C 1
Intro
▪ Les premiers ordinateurs étaient
▪ D’énormes engins, occupant plusieurs pièces, consommant de l’électricité
comme les grandes usines et coutaient des millions de dollars
▪ Moins performant que nos smartphones
▪ Les programmes étaient écrits en langage machine
▪ Séquences de bits qui contrôlaient directement le processeur en faisant :
▪ De l’arithmétique (addition, soustraction, multiplication, division, etc...)
▪ Du déplacement (transfert d’une unité de mémoire entre les registres et la mémoire
principale)
▪ Du contrôle (continuer l’exécution du programme à une autre adresse que la
suivante, de manière conditionnelle ou inconditionnelle). 2
Intro
▪ Langage machine
▪ Spécifier un programme est une tâche difficile
▪ Exemple : Un programme simple calculant le PGCD de deux entiers est donné
ci dessous en langage machine (en hexadécimal).
55 89 e5 53 83 ec 04 83 e4 f0 e8 31 00 00 00 89 c3 e8 2a 00
00 00 39 c3 74 10 8d b6 00 00 00 00 39 c3 7e 13 29 c3 39 c3
75 f6 89 1c 24 e8 6e 00 00 00 8b 5d fc c9 c3 29 d8 eb eb 90
▪ + contrôle total sur la machine.
▪ - inintelligible pour les humains
▪ - différent pour chaque type de machine
Dr. E_H_B. TOURE / Cours de C
3
Intro
▪ Langage assembleur
▪ Programmes plus grands ⇒ Besoin d’une notation moins sujette aux erreurs
▪ Le langage assembleur est inventé et permet d’exprimer des opérations à l’aide
d’abréviations mnémoniques.

▪ Le code du programme précédent en assembleur donne :

Dr. E_H_B. TOURE / Cours de C


4
Intro
▪ Assembleur - Limites
▪ Essentiellement une représentation textuelle symbolique du langage machine.
▪ Un peu plus lisible mais :
▪ beaucoup de code à écrire pour faire peu de choses,

▪ le programmeur doit être constamment conscient des contraintes de la machine (nb. registres, taille
des registres et mémoire, irrégularités du jeu d’instruction, contrôle efficace des pipelines de l’UC).

▪ Langages de bas-niveau :
▪ il faut s’occuper de détails qui ont plus rapport avec la machine qu’avec le calcul à faire

Dr. E_H_B. TOURE / Cours de C


5
Intro
▪ Langage de haut niveau
▪ Evolution des ordinateurs, des compétences de programmation
▪ Fastidieux de réécrire un programme pour chaque nouvelle machine

▪ Compliqué de se souvenir de tous les détails d’implémentation

▪ Besoin d’un langage indépendant de la machine


▪ Langage formel (dans lequel les calculs numériques sont exprimés dans un formalisme plus proche
des mathématiques)

▪ ⇒ Fortran, considéré comme le premier langage de programmation haut niveau.

Dr. E_H_B. TOURE / Cours de C


6
Intro
▪ Langage de haut niveau : Avantages.
▪ 1. notation plus familière et lisible
▪ 2. portabilité (un programme est portable s’il peut être exécuté sur une autre machine
avec peu ou pas de changements)
▪ 3. réutilisation de librairies de code
▪ 4. détection automatique d’erreurs
▪ 5. aide le programmeur à structurer et rendre plus robuste ses programmes
▪ Tout cela contribue à rendre le programmeur plus productif (moins de temps requis pour réaliser un
programme donné).

▪ Le langage de programmation est un intermédiaire entre le programmeur et la machine


Dr. E_H_B. TOURE / Cours de C
7
Intro
▪ Langage de haut niveau : Avantages.
▪ 1. notation plus familière et lisible
▪ 2. portabilité (un programme est portable s’il peut être exécuté sur une autre machine
avec peu ou pas de changements)
▪ 3. réutilisation de librairies de code
▪ 4. détection automatique d’erreurs
▪ 5. aide le programmeur à structurer et rendre plus robuste ses programmes
▪ Tout cela contribue à rendre le programmeur plus productif (moins de temps requis pour réaliser un
programme donné).

▪ Le langage de programmation est un intermédiaire entre le programmeur et la machine


Dr. E_H_B. TOURE / Cours de C
8
Intro
▪ Compilateur
▪ Un compilateur est un programme qui assure la translation
▪ langage de haut niveau ⇒ langage assembleur (ou langage machine)
▪ Compilateurs sont plus complexes que les assembleurs
▪ Un langage de haut niveau peut directement être interprété
▪ L’interpréteur lit les instructions de ce langage une à une et les exécute à la volée
▪ Compilation ⇒ Meilleure performance (Un passage)
▪ Interprétation ⇒ Plus de flexibilité et meilleure analyse (messages d’erreurs)

Dr. E_H_B. TOURE / Cours de C


9
Intro
▪ Compilateur

Dr. E_H_B. TOURE / Cours de C


10
Intro
▪ Préprocesseur
▪ La plupart des langages interprétés utilisent un traducteur initial : préprocesseur
▪ Supprime les commentaires et les caractères blancs,
▪ Regroupe les caractères en tokens tels que les mot-clés, les identificateurs, les nombres, etc.
▪ Identifie les structures syntaxiques de haut niveau (boucles, sous-programmes, etc.)
▪ L’objectif étant de produire un code intermédiaire
▪ Qui est une image du code source
▪ Et qui peut être interprété avec plus d’efficacité

Dr. E_H_B. TOURE / Cours de C


11
Intro
▪ Compilateur vs. Préprocesseur
▪ La compilation est la traduction d’un langage en un autre
▪ Contrairement au préprocesseur, la compilation implique la prise en compte du sens du langage en
entrée masque certaines étapes
▪ Un préprocesseur laisse souvent passer des erreurs.
▪ Voir TP0 (Partie B) : Etapes de compilation
▪ Production d’un fichier prétraité (preprocessing) avec l’extension .i
▪ Production du code assembleur avec l’extension .s
▪ Production du code binaire non exécutable avec l’extension .o
▪ Production de l’exécutable

Dr. E_H_B. TOURE / Cours de C


12
Exemple : Compilation pas à pas
▪ Preprocessing : production du fichier prétraité prog1.i
▪ Un fichier prétraité est un fichier C
▪ On remarque que dans prog1.i, on n’a plus la ligne 1 qui est remplacé par son contenu

Dr. E_H_B. TOURE / Cours de C 13


Exemple : Compilation pas à pas
▪ Assembleur : production du fichier assembleur prog1.s

Dr. E_H_B. TOURE / Cours de C 14


Exemple : Compilation pas à pas
▪ Code objet : production du fichier objet prog1.o
▪ Attention : Ce fichier est non exécutable et non human-readable

Dr. E_H_B. TOURE / Cours de C 15


Exemple : Compilation pas à pas
▪ Exécutable : production du fichier objet prog1.exe (extension non nécessaire)

Dr. E_H_B. TOURE / Cours de C 16


Compilateur gcc
▪ Compilation : gcc nomProg.c
▪ Exécution : a.exe (windows) ou ./a.out sur UNIX
▪ Alternatives
▪ Compilation : gcc nomProg.c –o nomDeMonExe
▪ Exécution : nomDeMonExe.exe (windows) ou ./nomDeMonExe
(UNIX)
Dr. E_H_B. TOURE / Cours de C
17
Compilateur gcc

Dr. E_H_B. TOURE / Cours de C


18
Compilation : plusieurs fichiers
▪ La compilation de plusieurs fichiers + production d’un exécutable

Dr. E_H_B. TOURE / Cours de C


19
Compilation : plusieurs fichiers
▪ Le linker met en relation plusieurs fichiers objets et des librairies statiques pour
produire un exécutable.
▪ Inclut plusieurs librairies standards (ex : libc)
▪ Libairie : Collection de fichiers objets (.o) préassemblés

Dr. E_H_B. TOURE / Cours de C


20

Vous aimerez peut-être aussi