Rappels des fondamentaux du langage C
- Structure minimale d’un programme C
- Règles de syntaxe essentielles
- Types de base, variables, constantes
- Opérateurs (arithmétiques, logiques, binaires, comparaison)
- Structures de contrôle : if, else, switch, while, for, do…while, break, continue
- Fonctions : déclaration, définition, appel, passage de paramètres
- Tableaux et chaînes de caractères simples
- Notions de compilation et d’édition de liens
Typage, pointeurs et structures avancées
- Types standards (stdint.h, limits.h), alias (typedef)
- Alignement mémoire, padding, endianness
- Pointeurs avancés :
– Arithmétique des pointeurs
– Pointeurs de fonctions
– Tableaux de pointeurs / pointeurs sur tableaux
- Structures avancées :
– Structures imbriquées, auto-référencées
– Unions et énumérations complexes
- Manipulation de chaînes :
– Fonctions standard (strcpy, strncpy, strtok)
– Sécurité mémoire, prévention des débordements
Gestion mémoire dynamique
- Allocation dynamique : malloc, calloc, realloc, free
- Portabilité, erreurs classiques et bonnes pratiques
- Segmentation mémoire d’un programme C
- Détection d’erreurs mémoire : valgrind
- Études de cas : listes chaînées, tableaux dynamiques, buffers
Modularité, compilation et outils de développement
- Organisation modulaire : séparation .h / .c, encapsulation des structures
- Design d’API en C
- Préprocesseur :
– #define, #include, #ifdef, #pragma once
– Macros à paramètres, macros sécurisées
- Compilation avancée avec gcc :
– Options, optimisation, gestion des warnings (-Wall, -Wextra, -O)
- Écriture de Makefile professionnels :
– Cibles, dépendances, variables, phony targets
- Introduction à l’outillage :
– gdb, valgrind, cppcheck, clang-tidy
Robustesse, bonnes pratiques et erreurs classiques
- Gestion des erreurs :
– Valeurs de retour, errno, perror, assertions
– Stratégies de contrôle qualité, logging simple
- Écriture défensive et lisibilité du code
- Audit de code et pièges courants du langage C
- Exemples réels d’erreurs critiques, et comment les éviter
Atelier de synthèse (optionnel)
- Mini-projet de synthèse (ex. : analyseur, shell minimal, moteur de calcul dynamique)
- Objectifs : modélisation, modularité, gestion mémoire, compilation, robustesse
- Revue collective du code avec échanges sur les choix techniques