Module 1 – Environnement de développement et chaîne de compilation C
- Panorama des normes du langage : C89, C99, C11, C17, C23 ; norme de référence utilisée en formation (C17) et principales évolutions apportées par C23
- Compilateurs GCC et Clang, phases de la compilation (préprocesseur, compilation, assemblage, édition de liens)
- Structure d'un programme C : fichier source, fonction main, en-têtes
Démonstration : compilation en ligne de commande avec les options -std=c17 -Wall -Wextra -Wpedantic -O0 -g, lecture des messages du compilateur, premier pas à pas dans un débogueur (gdb)
Exemples de travaux pratiques :
- Écriture et compilation d'un premier programme C
- Correction d'un programme à partir des avertissements du compilateur
Module 2 – Types de données et structuration de l'information
- Variables de types prédéfinis et types à largeur fixe (stdint.h)
- Tableaux, constantes et énumérations
- Structures (struct), unions et typedef
Exemples de travaux pratiques :
- Exercice de déclaration de variables de différents types (simples, tableaux)
- Lancement du projet fil rouge : modélisation d'un contact (structure regroupant nom, prénom, téléphone, e-mail) et création d'un tableau statique de contacts
Module 3 – Opérateurs et structures de contrôle
- Opérateurs arithmétiques, relationnels, logiques et bit à bit ; affectations composées
- Conversions et promotions de types
- Structures conditionnelles (if/else, switch) et boucles (for, while, do...while)
- Directives de préprocesseur utiles en pratique : #define, compilation conditionnelle, include guards
Atelier pratique : lecture et refactoring d'un programme fourni comportant des structures de contrôle imbriquées
Exemples de travaux pratiques :
- Ajout au projet fil rouge d'un menu interactif (saisir, afficher, quitter) permettant de peupler et consulter le tableau de contacts
- Validation du format d'un numéro de téléphone ou d'une adresse e-mail saisis par l'utilisateur
Module 4 – Fonctions et organisation d'un projet C
- Déclaration, définition et appel de fonctions ; prototypes
- Portée des variables (locale, globale, statique) et passage de paramètres par valeur
- Découpage d'un programme en plusieurs fichiers sources et fichiers d'en-tête
- Compilation séparée et introduction au Makefile
Cas concret : refactorisation du projet fil rouge en fonctions dédiées (ajout, recherche, affichage d'un contact)
Exemples de travaux pratiques :
- Répartition du projet fil rouge en plusieurs fichiers sources et compilation à l'aide d'un Makefile
Module 5 – Chaînes de caractères et pointeurs
- Manipulation des chaînes de caractères : strlen, strcmp, strncpy, strncat, snprintf ; fonctions de conversion (strtol, strtod) ; fonctions à proscrire (gets, strcpy, strcat, sprintf) et raisons de leur mise à l'écart
- Notion de pointeur : adresse et valeur, arithmétique de pointeurs, lien entre pointeurs et tableaux, pointeurs de fonctions
Démonstration : observation en débogueur des adresses mémoire et du contenu des pointeurs
Exemples de travaux pratiques :
- Sécurisation de la saisie et de la comparaison des champs texte (nom, e-mail) du projet fil rouge à l'aide des fonctions de la bibliothèque standard
- Parcours du tableau de contacts à l'aide de pointeurs
Module 6 – Gestion dynamique de la mémoire et manipulation de fichiers
- Allocation dynamique : malloc, calloc, realloc, free ; bonnes pratiques (vérification des retours, mise à NULL après libération, prévention des fuites et des doubles libérations)
- Ouverture, lecture, écriture et fermeture de fichiers ; gestion des erreurs d'entrée/sortie
Démonstration : détection, à l'aide de Valgrind ou d'AddressSanitizer, d'une fuite mémoire introduite volontairement dans une variante du projet fil rouge
Exemples de travaux pratiques :
- Migration du tableau statique de contacts vers une allocation dynamique (realloc) permettant un annuaire de taille variable
- Sauvegarde et rechargement de l'annuaire de contacts dans un fichier texte
Module 7 – Structure de données chaînée : projet de synthèse
- Principe de la liste chaînée simple : ajout, parcours, suppression, libération complète de la structure
Mise en situation professionnelle : migration de l'annuaire de contacts vers une liste chaînée pour une gestion dynamique de l'ajout et de la suppression ; revue de code collective à partir d'une grille de bonnes pratiques (gestion mémoire, robustesse, lisibilité)
Exemple de travaux pratiques :
- Projet final : finalisation de l'annuaire de contacts sous forme de liste chaînée (ajout, affichage, recherche, suppression, libération complète de la mémoire)