Aurélien Max | • 12 séances de cours de 1h mercredi 16-17h, salle A203 • 12 séances de TD de • Evaluation – projet noté – – examen final • Contact | Organisation du cours | ||||||||||||
: 1h: mercredi 10h30-12h30, salle Linux exercices de TD (éventuellement) 2 | ||||||||||||||
• 1972: programmation structuré mais « Unix. • 1978: Brian Kernighan programming language C. • 1983: l’ANSI • 1988: 2ème édition de devient la référence du C ANSI. • 1983: | Historique du langage C | • Langage universel • Langage compact • Langage « mémoire. rapides. | Tour d’horizon Les avantages du langage C | |||||||||||
Dennis Ritchie (Bell Labs) conçoit un langage de près de la machine » pour développer une version portable du système d’exploitation et Dennis Ritchie publient The C , livre de référence du standard K&R commissionne une définition explicite et indépendante de la machine pour C (standard C ANSI). The C programming language, qui émergence du langage C++ (Bjarne Stroustrup et al., AT&T), ajoutant au C ANSI la programmation orientée objet. 3 | ||||||||||||||
: C n’est pas orienté vers un domaine d’application particulier, comme Fortran (applications scientifiques) ou COBOL (applications de gestion). : le langage est constitué d’un noyau d’opérateurs et de fonctions prédéfinies limité (formulation simple et efficace): se limite aux fonctionnalités qui peuvent être traduites efficacement en langage machine. près de la machine »: C offre des opérateurs qui sont très proches de ceux du langage machine et des fonctions qui permettent un accès direct aux fonctions internes de l’ordinateur, notamment pour la gestion de la permet de développer des programmes efficaces et 4 | ||||||||||||||
• programmation standard • Langage portable respectée. • Langage extensible fonctions ont été développées. | Tour d’horizon Les avantages du langage C | • Langage modulaire: – modules, ou « particulier. Favorise la réutilisabilité – – exécutable. | Tour d’horizon Les avantages du langage C | |||||||||||
Langage indépendant de la machine: C peut être utilisé sur n’importe quel ordinateur disposant d’un compilateur adéquat. C est devenu le langage de pour les micro-ordinateurs. : un même programme peut être recompilé sur un autre ordinateur utilisant un autre système d’exploitation si la norme C ANSI est : en plus des fonctions standard, de nombreuses bibliothèques de 5 | Un programme peut être constitué de plusieurs fichiers sources ». Un module regroupe les déclarations de types et les définitions de fonctions relatives à un type de données Favorise la structuration et la compréhensibilité du code. du code. Chaque fichier source peut être traduit ou compilé en un fichier objet propre à la machine. La modification d’un fichier source ne nécessite pas la recompilation de tous les fichiers sources. L’ensemble des fichiers objets définissant un programme sont associés pour constituer un fichier 6 |
• Efficacité et compréhensibilité for (i = 0; i < n; i++) printf } else { } } | Tour d’horizon Limitations du langage C | • Efficacité et compréhensibilité void while } void int while } } | Tour d’horizon Limitations du langage C | ||
: il peut être difficile de concilier ces deux exigences, ex.:
7 | (suite):
8 | ||||
• Limites de la portabilité – – – • Discipline de programmation: – compréhensible. • Conclusions (partielles): – l’expérience. – | Tour d’horizon Limitations du langage C | • C++ et Java: – langages. – important de passer par la « programmation orientée objet. • • – – | Pourquoi enseigner le C aujourd’hui? (en 2004) | ||
: La portabilité est un des grands avantages de C… or le répertoire des fonctions C ANSI est assez limité… Si l’on souhaite faire appel à des fonctions spécifiques d’une machine on risque de perdre la portabilité. C offre beaucoup de libertés au programmeur, qui doit donc veiller à adopter un style de programmation solide et Programmer de façon efficace en langage C nécessite de Les commentaires et le choix judicieux des noms des identificateurs sont indispensables pour rendre les programmes compréhensibles, et donc utilisables. 9 | C est un langage important de l’histoire de l’informatique, dont dérive en partie les langages nombre des notions de C sont transposables dans ces case C » avant d’aborder la Beaucoup de programmes existants sont écrits en C, et doivent être maintenus et mis-à-jour. C est encore largement utilisé, notamment pour le développement proche de la machine, ex: systèmes d’exploitation (plus de 90% du noyau d’Unix) compilateurs C et outils de programmation 10 | ||||
• Un module Module – un fichier entête, • • – un fichier source, • | Programmation modulaire | • (directive #include #include “Module1.h“ • ou dans son fichier entête: #include “Module1.h“ #include “Module2.h" | Notion d’inclusion | ||
est constitué de deux fichiers: M.h: déclaration d’un type de données utilisé dans le programme déclaration d’entêtes de fonctions relatives à ce type Module.c: définition des fonctions déclarées dans le fichier entête 11 | Tout fichier source doit inclure son fichier entête ): ainsi, les définitions des fonctions correspondent à leur déclaration: Tout module utilisant un autre module doit inclure le fichier entête de ce dernier dans son fichier source 12 |
• ( naissance et une adresse). • Modélisation possible: – Module « chaine.h): etc.) – Module « date date et des fonctions associées. – Module « étudiant | Exemple de programmation modulaire | exécutable par la machine: 1) compilation: - remplacements) - - Module.c, Module.h 2) édition de liens: - exécutable | Traduction en langage machine | ||
Traduction des fichiers sources en un fichier prétraitement par le préprocesseur (inclusions et analyse lexicale et syntaxique et optimisation conversion en langage machine (fichier objet) Module.o réunit les différents modules objets et les fonctions de la bibliothèque standard afin de constituer un programme 14 | |||||
Application: gestion d’un ensemble d’étudiants définis par un nom, un prénom, une date de chaîne de caractères » ( chaine.c, définition du type chaîne de caractères et des fonctions associées (saisie, comparaison, affichage, » ( date.c, date.h ): définition du type » ( etudiant.c, etudiant.h ): définition du type étudiant et des fonctions associées. 13 | |||||
Traduction en langage machine Exemple | • source, compris entre la notation de C++ • – inclusion de fichiers (directive – #define) – #ifdef) | Traitements du préprocesseur | |||
Enlève les commentaires du texte d’un fichier /* … */ // commentaire sur une ligne est un ajout Traite les lignes précédées d’un caractère # pour créer le texte que le compilateur analysera: #include) définition de synonymes et de macro-fonctions (directive sélection de partie de texte (autour de la directive 16 | |||||
15 | |||||
• préprocesseur. • fichier du début à la fin – • ( | Compilation | • pas utiles. • l’ordinateur | Optimisation de code | ||
Prend en entrée le texte produit par le Analyse le texte source en une seule lecture du Ce type de lecture conditionne les contrôles que le compilateur peut faire: explique pourquoi toute variable ou fonction doit être déclarée avant d’être utilisée. Le compilateur crée des lignes d’assembleur langage machine) correspondant au texte analysé. 17 | Élimine les parties du code assembleur qui ne sont Remplace certaines séquences d’instructions par des instructions propres au processeur de produit un code plus compact et optimisé pour le type d’ordinateur sur lequel a lieu la compilation 18 |
• ( machine) – .o – (liens entre modules | Assembleur | • – compilateur – particulier libc.a – programme, – | Édition de liens | ||
Prend en entrée le code généré par le compilateur éventuellement optimisé) et génère un fichier en format compréhensible pour la machine (code sur les systèmes de type Unix, ces fichiers ont l’extension les fichiers objets contiennent des références insatisfaites ) 19 | Produit un exécutable à partir de fichiers objets: prend en entrée les fichiers objets générés par le prend également en entrée des bibliothèques, en utilise un fichier objet contenant le code de démarrage du crt0.o sur les systèmes de type Unix, l’édition de liens produit par défaut un système exécutable appelé a.out 20 | ||||
• Sous Unix, utilisation de GNU), ex: gcc < – l’option –c liens), ex: gcc –c module.c – l’option –O – exécutable produit, ex: gcc • Options propres à –-ansi –-pedantic | Production de fichier exécutable en pratique | • Un fichier Makefile – compilateur C choisi; – compilation; – création du fichier exécutable. • Contraintes du fichier – lorsqu’on invoque l’utilitaire – | Gestion de projet en C Makefile | ||
cc ou de gcc (version options> fichier_source.c arrête après la compilation (pas d’édition de module.o optimise le code généré l’option –o permet de spécifier le nom du fichier –o monProgrammeGenial module.cgcc: ne prend pas en compte les extensions du C GNU demande au compilateur de refuser la compilation de programmes non ANSI 21 | permet: d’assurer une compilation séparée à l’aide d’un de ne recompiler que le code modifié depuis la dernière Contient les instructions indiquant à la commande make comment exécuter les instructions nécessaires à la Makefile: Le fichier doit se trouver dans le répertoire courant make. Les instructions contenues dans le fichier obéissent à une syntaxe stricte permettant de définir des règles. 22 | ||||
• cible: dependance commandes –cible: –dependances: création de la cible est plus récent que la cible -commandes: pour créer la cible: utiliser \ à ligne de texte | Règles d’un fichier Makefile | # fichier Makefile all: chaine.o gcc –o gestetud chaine.o: chaine.c gcc –c chaine.c Exemples d’utilisation sous le shell > make all > make > make chaine.o | Fichier Makefile Exemple | ||
Les règles définissent ce qui doit être exécuté et comment pour construire une cible: nom du fichier généré par les commandes qui suivent, ou action générée par ces commandes fichiers ou règles nécessaires à la Si la cible est un fichier, la cible n’est construite que si ce fichier suite de commandes du shell exécutées les commandes sont toujours précédées d’une tabulation la fin de la ligne si les commandes dépassent une 23 | |||||
Unix: 24 |
• NOM = VALEUR • Appel de macro-commande: $(NOM) • Utilisation possible de « fichier?.c | Fichier Makefile Macro-commandes | # fichier Makefile BIN = gestetud OBJECTS = etudiant.o CC = gcc all: $(OBJECTS) $(CC) $(OBJECTS) chaine.o: chaine.c $(CC) –c chaine.c etudiant.o: etudiant.c $(CC) –c etudiant.c clean: rm –f *.o $(BIN) | Fichier Makefile Exemple plus complet | |
Déclaration de macro-commande: jockers », ex.: 25 | 26 |