Langage C
bg right w:200
Durée : 28h
Dernière modification : 09/26
ESGI (Eductive) B1
Paul Schuhmacher
E-mail : pschuhmacher@myges.fr
Module 01 - Introduction #
- Objectifs
- Présentation du plan du cours
- Bref historique du langage C
- Philosophie du langage C
- Usage du C
Objectifs #
A l’issue de ce module :
- Vous comprendrez les principes de base du fonctionnement des
ordinateurs (CPU, mémoire)
- Vous maîtriserez les fondamentaux de la programmation
procédurale (types, opérateurs, structures de contrôle, variables,
algorithmie, procédures/fonctions et abstractions, organisation
d’un programme et des sources, etc.)
- Vous maîtriserez les fondamentaux du langage C (syntaxe C,
écrire des petits programmes utiles, compilation et options du
compilateur, pointeurs, gestion de la mémoire et des entrées/sorties
(clavier, fichiers), bibliothèque standard, etc.)
En apprenant le langage C vous apprenez en mĂŞme temps la
plupart de autres langages !
Plan #
Partie 1 (T1) #
- Module 01 - Introduction : historique, présentation du
C
- Module 02 - Découverte du C par la pratique (TP tutoriel),
setup environnement de développement
- Module 03 - Types, opérateurs et expressions
- Module 04 - Flot de contrĂ´le
- Module 05 - Fonctions et procédures
- Module 06 - Pointeurs, tableaux et chaînes de caractères
Partie 2 (T2) #
- Module 07 - Les structures
- Module 08 - Gestion de la mémoire et allocation dynamique
- Module 08 - Gestion des entrées et sorties
- Module 09 - Aller plus loin : La compilation plus en détail,
organiser son code source, créer une librairie partagée, utilisation de
Make
- Module 10 - Aller plus loin (Bonus) : Notions avancées
Évaluations #
- 2 Contrôles Continus (Validation d’acquis,
10min);
- 1 Partiel
Bibliographie #
Une
bibliographie du cours vous est fournie pour poursuivre votre
apprentissage et aller plus loin.
Conseil : choisir un livre (ou un site web) et vous en servir de
référence. Le parcourir (utiliser la table des matières), le
lire, programmer et résoudre les problèmes proposés
!
Très bref historique du
langage C #
Ken Thompson (gauche) et Dennis Ritchie (droite), 1973
bg right contain
Le langage C aujourd’hui #
- Le langage C est omniprésent aujourd’hui (noyau
Linux, serveurs du réseau Internet sous GNU/Linux, informatique
embarquée, applications, systèmes d’exploitation, machines virtuelles
d’autres langages comme PHP, Java, Python, etc.)
- Plusieurs versions : C89 ou ANSI C
(1989), C99 (1999), C11(2011), C23 (2024)
Caractéristiques générales du C
#
Le langage C :
- est un langage compilé, généraliste et procédural;
- est relativement petit (par design !), typé, avec
un ensemble minimal de constructs afin de produire un langage
assembleur simple
- est simple (différent
de facile!)
- est portable. Du fait de sa petite taille et de sa
simplicité, il est possible de créer facilement un compilateur C pour
tout nouveau processeur. En ce sens, c’est le langage le plus
portable au monde !
- sert d’abstraction aux langages assembleurs et aux
différentes architectures CPU. En ce sens, le C est un langage haut
niveau
- permet d’exercer un contrôle fin des ressources de la
machine (CPU, mémoire, etc.). En ce sens, c’est un langage bas
niveau
- dispose d’une grande communauté (de nombreuses ressources
d’apprentissage, de bibliothèques logicielles, d’outils ) et de beaucoup
expertise accumulée depuis les années 70
Apprendre le C c’est comme apprendre les échecs : les règles sont
simples à énoncer et à apprendre. Cependant, maîtriser le
langage demande du temps et de l’expérience
La bibliothèque standard #
Le langage C (définir par son compilateur) est accompagné d’une Bibliothèque
standard (standard library) normalisée en 1989. Cette
bibliothèque ne fait pas partie du C, c’est une annexe au
langage;
La bibliothèque standard fournit un vaste ensemble de définitions
de fonctions (ce qu’elles doivent faire) usuelles et utiles aux
développeur·ses. Il en existe différentes implémentations
(comment elles le font);
Primitives du C #
Le langage C fournit :
- Variables ;
- Types de base et types complexes;
- Structures pour contrôler le flot d’exécution;
- Opérations primitives
- Collections (tableaux)
- Fonctions (procédures);
- Une gestion de la mémoire complète via les pointeurs
- Une encapsulation parfaite (on y reviendra plus tard)
Le C fournit exactement tout ce qu’il faut pour écrire
n’importe quel programme ou abstraction
Anatomie du langage C #
- Le langage C est défini par son
compilateur (ex:
gcc, clang,
etc.);
- La bibliothèque standard (standard
library, librairie standard, lib standard) :
- Déclarations (header) et macros;
- Implémentations (binaires). Ex :
glibc,
Microsoft C runtime env
- Les bibliothèques tierces (vendor, fournies par
d’autres développeur·ses)
Dans ce cours nous utiliserons le
compilateur gcc (GNU Compiler Collection), un logiciel libre
(free software) issu du projet GNU
Pourquoi apprendre Ă
programmer en C ? 1/2 #
- Le C est un langage historiquement important, dont de nombreux
langages se sont inspirés. Apprendre le C, c’est apprendre d’autres
langages
- Le langage est de petite taille, il est donc plus
facile à apprendre que d’autres langages (comme C++ ou Java).
Sa petite taille vous permet de construire plus facilement un écosystème
d’outils performants (compilateurs, outils de debug, etc.) autour de
votre projet !
- Le C est omniprésent dans votre vie. Vous pourrez mieux
comprendre les logiciels que vous utilisez et les modifier/corriger
- Portabilité ! Vous pouvez toujours exécuter votre code quelque
part
- Stabilité ! Le langage C évolue très peu ce qui permet de
s’assurer que du code C écrit à un instant
soit toujours valide et exécutable facilement dans plusieurs décennies
(siècles ? millénaires ?)
- Permet de créer des applications et des bibliothèques logicielles
performantes
- Offre une gestion manuelle de la mémoire (optimisation,
contrĂ´le)
- Permet de communiquer avec le hardware
Quelques “inconvénients” : pas forcément évident à maîtriser
(demande des efforts !), langage vanilla assez bas
niveau (primitives) pas nécessairement le plus adapté pour résoudre
rapidement des problèmes métiers, moins adapté pour le web
Pourquoi apprendre Ă
programmer en C ? 2/2 #
- Le C vous oblige Ă bien comprendre ce que votre code
fait et Ă penser clairement
- A la frontière entre le bas niveau et le haut niveau (généraliste).
On peut s’intéresser à des aspects bas niveau (mémoire, manipulation
d’adresses, etc.) ou construire des abstractions de plus haut
niveau
- Permet de comprendre des concepts importants : gestion de la mémoire
et les différents segments mémoire définis pour un processus,
intégration avec le système d’exploitation, streams, pointeurs,
l’encapsulation (la vraie), abstractions,
architecture logicielle et gestion des dépendances, source
d’erreurs et de bugs et comment les corriger, etc.