Programmation Procédurale en Langage C Cours et Exercices Pratiques — S3-PRC Éc
Programmation Procédurale en Langage C Cours et Exercices Pratiques — S3-PRC École Nationale d'Ingénieurs de Brest (ENIB) Fabrice Harrouet, version du 26 janvier 2018 Cette ancienne version du cours n’est plus maintenue. Voir désormais → http://www.enib.fr/~harrouet/s3prc/ 2/202 Cours et Exercices Pratiques — S3-PRC Table des matières Avant-propos 9 1. C01_Basics : Éléments de base du langage 11 1.1. Pourquoi le langage C ? ............................................................................................... 11 1.2. Un programme est un ensemble de fonctions ............................................................. 12 1.2.1. Fabrication d'un programme ............................................................................. 13 1.2.2. La fonction principale ........................................................................................ 13 1.2.3. Le prototype d'une fonction .............................................................................. 14 1.2.4. Les fonctions externes ....................................................................................... 15 1.3. T ypage des données .................................................................................................... 16 1.3.1. Déclaration de variables .................................................................................... 16 1.3.2. Quelques types usuels ...................................................................................... 17 1.3.3. Conversion de type ........................................................................................... 20 1.3.4. Portée et classe de stockage des variables ....................................................... 21 1.4. Les règles d'écriture du langage .................................................................................. 22 1.4.1. Le préprocesseur ............................................................................................... 22 1.4.2. La mise en forme .............................................................................................. 24 1.4.3. Les identificateurs ............................................................................................. 25 1.4.4. Les blocs, les instructions et les expressions ..................................................... 25 1.4.5. Les instructions de contrôle ............................................................................... 28 1.5. Résumé ....................................................................................................................... 35 2. L01_Build : Organisation et fabrication d'un programme 37 2.1. Un premier programme en langage C ......................................................................... 37 2.1.1. Rédaction du code source ................................................................................. 37 2.1.2. Compilation du programme ............................................................................... 38 2.1.3. Exécution du programme .................................................................................. 40 2.2. Vers une approche modulaire du développement ....................................................... 41 2.2.1. Référence à un module de l'application ............................................................. 41 2.2.2. Ajout d'un module à l'application ...................................................................... 42 2.3. Démarche de compilation séparée .............................................................................. 43 2.3.1. Modification d'un module .................................................................................. 43 Programmation Procédurale en Langage C Fabrice Harrouet, ENIB, 26 janvier 2018 3/202 2.3.2. Digression : analyse d'un plantage au débogueur ............................................. 44 2.3.3. Cohérence entre déclaration et définition ......................................................... 45 2.3.4. Modules interdépendants .................................................................................. 47 2.3.5. Digression : analyse de l'exécution au débogueur ............................................ 49 2.4. Automatisation de la construction ............................................................................... 50 2.4.1. Un fichier makefile très spécifique .................................................................... 50 2.4.2. Généralisation du fichier makefile ..................................................................... 52 2.5. Résumé ....................................................................................................................... 54 3. C02_Pointers : Pointeurs et tableaux 59 3.1. Les passages de paramètres ....................................................................................... 59 3.1.1. Passage par valeur ............................................................................................ 59 3.1.2. Passage par adresse .......................................................................................... 60 3.2. Les variables de type pointeur .................................................................................... 61 3.2.1. Déclaration de pointeurs ................................................................................... 61 3.2.2. Utilisation d'un pointeur .................................................................................... 62 3.2.3. Un pointeur comme type de retour ................................................................... 62 3.3. Les variables de type tableau ...................................................................................... 63 3.3.1. Déclaration et utilisation d'un tableau ............................................................... 63 3.3.2. Initialisation d'un tableau .................................................................................. 64 3.3.3. Précautions pour l'usage des tableaux et des pointeurs .................................... 65 3.4. Opérations sur les pointeurs ........................................................................................ 68 3.4.1. T aille d'une variable de type pointeur ................................................................ 68 3.4.2. Arithmétique des pointeurs ............................................................................... 69 3.4.3. Valeur booléenne d'un pointeur ........................................................................ 70 3.4.4. Conversion du type d'un pointeur ..................................................................... 71 3.4.5. Le qualificatif const ........................................................................................... 71 3.4.6. Pointeur sur pointeur ......................................................................................... 72 3.5. Résumé ....................................................................................................................... 73 4. L02_Types : Variété de types 75 4.1. Mise en place du programme ...................................................................................... 75 4.2. La taille des types ....................................................................................................... 76 4.2.1. L'opérateur sizeof .............................................................................................. 76 4.2.2. Comparaison de la taille des types .................................................................... 76 4.2.3. Les entiers de taille déterminée ........................................................................ 77 4.3. Dépassement de capacité ........................................................................................... 77 4.3.1. Conversion vers un type insuffisamment large ................................................. 77 4.3.2. Incrémentation excessive .................................................................................. 78 4.3.3. Dépassement dans un calcul arithmétique ....................................................... 79 4.3.4. Promotion automatique des petits entiers ......................................................... 80 4.4. Les limites des réels .................................................................................................... 81 4/202 Cours et Exercices Pratiques — S3-PRC 4.4.1. L'arrondi de la représentation réelle .................................................................. 81 4.4.2. Les ordres de grandeur des valeurs réelles ....................................................... 82 4.4.3. Application au développement en série ............................................................ 83 4.4.4. Digression : étude de l'évolution des variables au débogueur .......................... 84 4.5. Résumé ....................................................................................................................... 85 5. C03_Strings : Chaînes de caractères 91 5.1. Séquences de caractères ............................................................................................ 91 5.1.1. Le type des caractères ...................................................................................... 91 5.1.2. Les caractères littéraux ..................................................................................... 92 5.1.3. Les catégories de caractères ............................................................................. 92 5.1.4. Le zéro terminal ................................................................................................ 93 5.2. Initialisation des chaînes de caractères ....................................................................... 94 5.2.1. Les chaînes littérales ......................................................................................... 94 5.2.2. Affectation à un pointeur ................................................................................... 94 5.3. Les fonctions de manipulation de chaînes ................................................................... 95 5.3.1. Longueur d'une chaîne ...................................................................................... 95 5.3.2. Comparaison de chaînes ................................................................................... 96 5.3.3. Recherche dans une chaîne ............................................................................... 97 5.3.4. Recopie d'une chaîne ........................................................................................ 97 5.4. La ligne de commande ................................................................................................ 98 5.5. Résumé ....................................................................................................................... 99 6. L03_Alloc : Allocation dynamique 101 6.1. Mise en place du programme .................................................................................... 101 6.2. Limite de la pile d'exécution ...................................................................................... 102 6.3. Allocation dynamique de mémoire ............................................................................ 104 6.3.1. Prise en main .................................................................................................. 104 6.3.2. Digression : contrôle de l'échec de l'allocation ................................................ 105 6.3.3. Intégration au module ..................................................................................... 106 6.4. Ré-allocation de la mémoire dynamique ................................................................... 106 6.5. Allocation spéculative ................................................................................................ 108 6.6. Résumé ..................................................................................................................... 109 7. C04_Struct : Structures de données 117 7.1. Un nouveau type de données .................................................................................... 117 7.1.1. Définition d'une structure ................................................................................ 117 7.1.2. Accès aux membres d'une structure ............................................................... 118 7.1.3. Initialisation d'une structure ............................................................................ 119 7.1.4. Copie d'une structure ...................................................................................... 119 7.1.5. Disposition des membres d'une structure ....................................................... 120 Programmation Procédurale en Langage C Fabrice Harrouet, ENIB, 26 janvier 2018 5/202 7.2. Usage effectif des structures ..................................................................................... 121 7.2.1. Un type simple : un peu plus qu'un type de base ............................................ 122 7.2.2. Un type élaboré : gestion de ressources .......................................................... 123 7.2.3. Optimisation de l'interface .............................................................................. 124 7.3. Résumé ..................................................................................................................... 127 8. L04_IO : Entrées-sorties 129 8.1. Mise en place du programme .................................................................................... 129 8.2. Formatage de texte ................................................................................................... 129 8.3. Sortie standard et sortie d'erreurs standard .............................................................. 130 8.4. Écriture de texte dans un fichier ............................................................................... 131 8.5. Sauvegarde d'une image dans un format textuel ...................................................... 132 8.6. Entrée standard ......................................................................................................... 133 8.7. Lecture d'une image dans un format textuel ............................................................. 134 8.8. Entrées-sorties dans un format binaire ...................................................................... 135 8.8.1. Lecture et écriture de données binaires dans un fichier .................................. 135 8.8.2. Sauvegarde d'une image dans un format binaire ............................................ 136 8.8.3. Lecture d'une image dans un format binaire ................................................... 137 8.9. Analyse de la ligne de commande ............................................................................. 137 8.10. Résumé ................................................................................................................... 138 9. L05_Bitwise : Opérations bit-à-bit 147 9.1. Mise en place du programme .................................................................................... 147 9.2. Les opérations de décalage ....................................................................................... 148 9.3. Les combinaisons bit-à-bit ......................................................................................... 149 9.4. T est de bits et forçage à 1 ......................................................................................... 150 9.5. Complémentation et forçage de bits à 0 ................................................................... 151 9.6. Opérations bit-à-bit sur les entiers signés ................................................................. 151 9.7. Résumé ..................................................................................................................... 153 10. L06_Maths : Opérations mathématiques 159 10.1. Mise en place du programme .................................................................................. 159 10.2. La bibliothèque mathématique ................................................................................ 159 10.2.1. Mise en œuvre de la bibliothèque mathématique ......................................... 160 10.2.2. Détection des valeurs extrêmes .................................................................... 161 10.2.3. Arrondi d'un réel vers un entier ..................................................................... 161 10.2.4. Les valeurs réelles anormales ....................................................................... 163 6/202 Cours et Exercices Pratiques — S3-PRC 10.3. Génération pseudo-aléatoire ................................................................................... 164 10.3.1. Obtention de valeurs pseudo-aléatoires ........................................................ 164 10.3.2. Choix de la plage de valeurs pseudo-aléatoires ............................................ 165 10.3.3. Distributions de valeurs pseudo-aléatoires réelles ........................................ 165 10.4. Résumé ................................................................................................................... 166 11. L07_FnctPtr : Pointeurs sur fonctions 173 11.1. Mise en place du programme .................................................................................. 173 11.2. Déclaration et utilisation d'un pointeur sur fonctions .............................................. 174 11.3. Généralisation d'un traitement ................................................................................ 175 11.4. Paramétrage des traitements génériques ............................................................... 176 11.5. Résumé ................................................................................................................... 178 12. L08_Perfs : Optimisation des performances 183 12.1. Mise au point ou optimisation .................................................................................. 183 12.1.1. Permettre l'usage d'un débogueur ................................................................ 183 12.1.2. Détecter au plus tôt les incohérences dans l'application ............................... 184 12.1.3. Instrumenter le code pour détecter les maladresses ..................................... 184 12.1.4. Compiler pour l'optimisation ......................................................................... 185 12.2. Recommandations pour l'optimisation .................................................................... 185 12.2.1. Éliminer les répétitions inutiles ..................................................................... 186 12.2.2. La vision limitée du compilateur .................................................................... 187 12.2.3. Expliciter nos intentions ................................................................................ 188 12.2.4. Préférer les entiers signés aux entiers non-signés ......................................... 189 12.3. Résumé ................................................................................................................... 190 Glossaire 195 Programmation Procédurale en Langage C Fabrice Harrouet, ENIB, 26 janvier 2018 7/202 8/202 Cours et Exercices Pratiques — S3-PRC Avant-propos Ce document contient à la fois des cours et des sujets de séances pratiques pour découvrir le langage C dans le cadre de la matière S3-PRC de l'École Nationale d'Ingénieurs de Brest (ENIB). Cet enseignement n'a pas vocation à être exhaustif sur tous les détails de ce langage. Il s'agit plutôt de fournir les éléments nécessaires à une maîtrise suffisante pour être en mesure : • de comprendre l'essentiel des réalisations existantes, • de les modifier et d'en produire de nouvelles, • de disposer d'éléments de compréhension pour exploiter une documentation détaillée. Ce support a été rédigé avec à l'esprit une démarche d'apprentissage progressive au fil du semestre. Il doit être étudié du début vers la fin car chaque chapitre ne dépend de ce qui précède (bien que des renvois permettent de renforcer les liens entre les notions). Il ne s'agit en aucun cas d'un manuel de référence regroupant par catégories les fonctionnalités du langage. Il existe de nombreux ouvrages dédiés à ce propos ; ce document fait notamment de très nombreuses références au site : ( http://en.cppreference.com/w/c ) Cet enseignement est au contraire organisé par thèmes et vise principalement à porter l'accent sur les uploads/Litterature/ old-s3prc.pdf
Documents similaires










-
36
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jui 27, 2022
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 1.1938MB