Année: 2026-2027
Plan du Cours
- Introduction à C
- 1.1. Programmation en C: Introduction
- 1.2. Programmation en C: Histoire
- 1.2. Évolution des normes: C89/C90, C99, C11, C17 et C23
- 1.3. Bonjour le Monde!!
- 1.3. int main(void): les formes garanties par la norme
- 1.4. Compilation
- 1.4. La compilation
- 1.4. Choix explicite de la norme: -std=c17, -std=c23, -std=gnu23
- 1.4. Les options de compilation recommandées: avertissements, -g, sanitizers
- 1.4. Compiler avec gcc et clang, analyse statique avec -fanalyzer
- 1.5. Les commentaires
- 1.6. Les types de base
- 1.7. Les types caractères et entiers
- 1.8. Declaration des variables
- 1.9. L'intervalle minimum et maximum
- 1.10. taille (en octets)
- 1.10. Les types de taille fixe: stdint.h, size_t, ptrdiff_t
- 1.10. Afficher ces types: inttypes.h, %zu, %td
- 1.11. Afficher à l'écran
- 1.11. printf: Afficher à l'écran
- 1.11. printf: les pièges de format et les chaînes de format
- 1.12. Les notations
- 1.13. Les opérateurs arithmétiques
- 1.14. Les opérateurs relationnels
- 1.15. Les opérateurs logiques
- 1.16. Les opérateurs d'incrementation
- 1.17. Les opérateurs de manipulation de bits
- 1.17. Constantes binaires, séparateurs de chiffres et stdbit.h (C23)
- 1.17. Décalages: deux comportements indéfinis
- 1.18. Les opérateurs d'affectation
- 1.19. Structures de contrôle: les branchements conditionnels
- 1.20. Structures de contrôle: les branchements conditionnels (choix)
- 1.21. Structures de contrôle: les boucles
- 1.22. Structures de contrôle: les sauts (branchements inconditionnels)
- 1.23. Les tableaux
- 1.23. Initialisation désignée (C99)
- 1.23. sizeof: tableau ou pointeur ?
- Les pointeurs, les structures et les fonctions
- 2.1. Objectifs
- 2.2. Microprocesseur
- 2.3. Mémoire vive
- 2.4. Mémoire Virtuelle
- 2.5. Bit de poids fort et faible
- 2.6. Endianness (Boutisme)
- 2.7. Pointeurs
- 2.7. NULL et nullptr (C23)
- 2.8. L'opérateur de déréférenciation
- 2.9. Les pointeurs et les tableaux
- 2.10. Tableaux: indices
- 2.11. Les pointeurs: notations
- 2.12. Les opérateurs et les pointeurs
- 2.13. Les pointeurs génériques
- 2.14. Conversion de type
- 2.15. Les Structures
- 2.15. Initialisation désignée et littéraux composés
- 2.16. Typedef
- 2.17. Fonctions
- 2.18. L'interface en ligne de commande
- 2.19. La saisie d'entiers par l'utilisateur
- 2.20. La saisie d'un mot par l'utilisateur
- 2.21. La saisie par l'utilisateur: scanf
- 2.22. fgets: la saisie d'une phrase par l'utilisateur
- 2.23. Les manuels Linux
- 2.24. La manipulation d'une chaine de caractères
- 2.25. La manipulation de fichiers
- 2.26. Allocation dynamique de mémoire
- 2.26. Vérifier chaque allocation
- 2.26. Propriété et chemins d'erreur
- 2.26. Calculer une taille sans débordement
- 2.27. Les unions
- 2.28. Débogage et test: une méthode, cinq niveaux
- 2.29. Sanitizers, analyse statique et tests: ASan, UBSan, valgrind,
-fanalyzer, assert
- Les appels systèmes, les erreurs et la chaine de Compilation
- 3.1. Objectifs
- 3.2. Les variables constantes: #define, const et constexpr (C23)
- 3.3. La portée des variables
- 3.4. Le passage de paramètres
- 3.5. Préprocesseur
- 3.6. Alignement en mémoire: alignas, alignof, aligned_alloc, static_assert
- 3.7. Les structures et les pointeurs
- 3.8. Les erreurs: perror
- 3.9. Répertoire (dossier)
- 3.10. Programmation modulaire
- 3.11. Réseau: Architecture client-serveur
- 3.12. La chaine de compilation
- 3.13. Optimisation du code: mesurer, hiérarchiser, comprendre l'optimiseur
- 3.14. Sécurité: le comportement indéfini, les chaînes, les entiers, les protections
du compilateur
- 3.15. Règles de codage: le style se délègue, les invariants non
- 3.16. Makefile: variables automatiques, règles génériques, dépendances d'en-têtes
- 3.17. L'environnement de développement: clangd, clang-format, CMake, intégration
continue, environnement reproductible
- 3.18. Programmer en C avec un assistant d'IA: limites, erreurs fréquentes, discipline
de vérification et responsabilité
Évaluation
- Les travaux pratiques constituent un entraînement progressif aux compétences attendues.
- L'évaluation repose sur deux épreuves écrites et individuelles : le
devoir surveillé (DS) sur la partie théorique (60 %, sur machine, documents
autorisés) et l'examen écrit de TP sur la partie pratique (40 %, sur papier, sans
documents ni machine). Internet n'est autorisé dans aucune des deux.
- Les épreuves peuvent inclure de la lecture de code, des corrections d'erreurs, des questions sur
la mémoire, la compilation, les appels système et l'analyse critique de code généré par IA.
Références
Crédits d'images