Pratique performante du langage C
Cours, techniques et exercices corrigés
Emmanuel Lazard
Ellipses
I Présentation
1
I.1 Introduction1
I.1.1 Histoire du C1
I.1.2 Présentation du langage2
I.1.3 Composition d'un programme4
I.1.4 Exemple : le «hello, world»5
I.1.5 Syntaxe de base du langage7
II Types fondamentaux et identificateurs
9
II.1 Types de base11
II.1.1 Entiers11
II.1.2 Réels14
II.1.3 Autres types16
II.2 Constantes21
II.2.1 Constantes caractères21
II.2.2 Constantes numériques24
II.2.3 Constantes chaînes de caractères26
II.2.4 Expression constante29
II.3 Définition de variables29
II.3.1 Identificateurs30
II.3.2 Déclaration31
II.3.3 Visibilité des variables35
II.3.4 Définition de type avec typedef40
III Expressions
41
III.1 Opérateurs42
III.1.1 Opérateurs arithmétiques42
III.1.2 Opérateurs bit à bit44
III.1.3 Opérateurs booléens47
III.1.4 Autres opérateurs50
III.2 Affectation52
III.2.1 Forme générale52
III.2.2 Forme condensée54
III.2.3 Incrémentation et décrémentation55
III.3 Conversion de types55
III.3.1 Conversion implicite55
III.3.2 Conversion explicite59
III.4 Évaluation des expressions61
III.4.1 Priorité des opérateurs61
III.4.2 Ordre d'évaluation63
IV Structures de contrôle
65
IV.1 Instructions65
IV.1.1 Principes et syntaxe65
IV.1.2 Instructions et expressions67
IV.1.3 Instructions et blocs68
IV.2 Instruction conditionnelle70
IV.2.1 Forme simple70
IV.2.2 Forme générale72
IV.2.3 Instruction de sélection74
IV.3 Boucles76
IV.3.1 Instruction de répétition76
IV.3.2 Instruction d'itération78
IV.4 Ruptures de séquence80
IV.4.1 Instruction de sortie de boucle80
IV.4.2 Instruction d'abandon d'itération81
IV.4.3 Instruction de sortie de fonction82
IV.4.4 Branchements83
V Première approche des entrées/sorties
87
V.1 Entrées/sorties par caractère88
V.1.1 Récupération88
V.1.2 Affichage89
V.2 Entrées/sorties formatées90
V.2.1 Affichage formaté90
V.2.2 Lecture formatée96
VI Tableaux et chaînes
103
VI.1 Tableaux103
VI.1.1 Définition et initialisation103
VI.1.2 Utilisation106
VI.1.3 Tableaux multidimensionnels108
VI.2 Chaînes de caractères111
VI.2.1 Initialisation et stockage111
VI.2.2 Utilisation113
VII Fonctions
115
VII.1 Définition118
VII.1.1 Syntaxe118
VII.1.2 Type de la fonction et des paramètres119
VII.1.3 Variables locales123
VII.2 Appel d'une fonction125
VII.2.1 Instruction d'appel125
VII.2.2 Paramètres126
VII.2.3 Nombre variable de paramètres128
VII.2.4 Récursivité130
VII.3 Prototype de fonction130
VII.3.1 Vérification par le compilateur130
VII.3.2 Déclaration avancée de fonction134
VIII Pointeurs
137
VIII.1 Description137
VIII.1.1 La mémoire137
VIII.1.2 Déclaration139
VIII.2 Utilisation142
VIII.2.1 Argument de type pointeur142
VIII.2.2 Différents types de pointeurs144
VIII.2.3 Arithmétique de pointeurs148
VIII.2.4 Pointeurs et tableaux149
VIII.2.5 Allocation dynamique153
VIII.2.6 Un exemple : tableau de pointeurs158
IX Structures et unions
163
IX.1 Structures163
IX.1.1 Déclaration163
IX.1.2 Structures et pointeurs166
IX.1.3 Structures et fonctions167
IX.1.4 Structures et récursivité168
IX.2 Unions170
IX.2.1 Définition170
IX.2.2 Utilisation171
IX.3 Champs de bits172
IX.3.1 Utilisation173
X Le préprocesseur
175
X.1 Macros176
X.1.1 Macros sans argument176
X.1.2 Macros avec arguments178
X.1.3 Utilisation179
X.2 Compilation conditionnelle184
X.2.1 Test d'existence184
X.2.2 Test général186
X.3 Modularité189
X.3.1 Conception d'un programme C189
X.3.2 Fichiers d'entête196
XI Les entrées/sorties
203
XI.1 E/S simples204
XI.1.1 E/S d'un caractère204
XI.1.2 E/S ligne par ligne204
XI.2 Gestion de fichiers205
XI.2.1 Flot caractère, flot binaire205
XI.2.2 Ouverture et fermeture de fichiers207
XI.2.3 Lecture et écriture textuelle209
XI.2.4 Lecture et écriture formatées213
XI.2.5 Opérations en mode binaire215
XI.2.6 Opérations diverses218
XII La bibliothèque standard
227
XII.1 Bibliothèques classiques228
XII.1.1 Bibliothèque standard : stdlib.h228
XII.1.2 Gestion des chaînes : string.h236
XII.1.3 Bibliothèque mathématique : math.h243
XII.1.4 Gestion des types : ctype.h246
XII.2 Autres247
XII.2.1 Aide à la mise au point : assert.h247
XII.2.2 Gestion du temps : time.h249
XII.2.3 Autres entêtes251
XIII C avancé
253
XIII.1 Pointeurs de fonction253
XIII.1.1 Utilisation253
XIII.1.2 Exemples255
XIII.1.3 Déclarations complexes259
XIII.2 Les normes C99 et C11261
XIII.2.1 C99261
XIII.2.2 C11264
XIII.3 Programmation multithreads266
XIII.3.1 Présentation266
XIII.3.2 Vie des threads269
XIII.3.3 Synchronisation des threads276
XIII.3.4 Modèles de programmation288
XIV Algorithmique et structures de données
293
XIV.1 Règles de base294
XIV.2 Structures de données classiques294
XIV.2.1 Tableau295
XIV.2.2 Liste chaînée297
XIV.2.3 Structure de pile301
XIV.2.4 Arbre binaire de recherche302
XIV.2.5 Table de hachage308
XIV.2.6 Tampon cyclique311
XV Méthodologie de bonne programmation
319
XV.1 Le génie logiciel319
XV.1.1 Les différentes étapes320
XV.1.2 Cycle de vie - les méthodes de développement323
XV.2 Bien programmer325
XV.2.1 Modélisation325
XV.2.2 Programmation327
XV.3 Éviter les bugs335
XV.3.1 Réflexes de programmation335
XVI Exercices
341
XVI.1 Exercices de base341
XVI.2 Exercices sur les tableaux345
XVI.3 Exercices sur les pointeurs349
XVI.4 Exercices sur les structures355
XVI.5 Exercices de gestion de fichiers362
Index
365
Bibliographie
372