Vous êtes sur la page 1sur 5

Table des mati`eres

1 Les bases 2
1.1 Un langage compile . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Generalites sur les langages de programmation . . . . . . 2
1.1.2 Le C comme langage compile . . . . . . . . . . . . . . . . 3
1.1.3 Notes sur la normalisation du langage C . . . . . . . . . . 4
1.1.4 C en pratique : compilation et debuggage . . . . . . . . . 4
1.2 Les mots-cles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Structure generale dun programme C . . . . . . . . . . . . . . . 7
1.5 Notion didenticateur . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 Conventions decritures dun programme C . . . . . . . . . . . . 9
1.7 Les types de base . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7.1 Les caract`eres . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7.2 Les entiers . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7.3 Les ottants . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.7.4 Le type void . . . . . . . . . . . . . . . . . . . . . . . . . 14
2 La syntaxe du langage 15
2.1 Expressions et Operateurs . . . . . . . . . . . . . . . . . . . . . . 15
2.1.1 Operateurs arithmetiques . . . . . . . . . . . . . . . . . . 15
2.1.2 Operateurs daectation . . . . . . . . . . . . . . . . . . . 16
2.1.3 Operateurs relationnels . . . . . . . . . . . . . . . . . . . 16
2.1.4 Operateurs logiques . . . . . . . . . . . . . . . . . . . . . 17
2.1.5 Operateurs bit `a bit . . . . . . . . . . . . . . . . . . . . . 18
2.1.6 Operateurs dacc`es `a la memoire . . . . . . . . . . . . . . 18
2.1.7 Autres operateurs . . . . . . . . . . . . . . . . . . . . . . 19
2.2 Les structures de controle . . . . . . . . . . . . . . . . . . . . . . 19
2.2.1 Instruction if...else . . . . . . . . . . . . . . . . . . . . . 20
2.2.2 Instruction for . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2.3 Instruction while . . . . . . . . . . . . . . . . . . . . . . 20
2.2.4 Instruction do...while . . . . . . . . . . . . . . . . . . . 21
2.2.5 Instruction switch . . . . . . . . . . . . . . . . . . . . . . 22
2.2.6 Instruction goto . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.7 Instruction break . . . . . . . . . . . . . . . . . . . . . . 23
2.2.8 Instruction continue . . . . . . . . . . . . . . . . . . . . 24
2.3 La recursivite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3
2.4 Les conversions de types . . . . . . . . . . . . . . . . . . . . . . . 25
2.4.1 Les situations de la conversion de type . . . . . . . . . . . 25
2.4.2 La r`egle de promotion des entiers . . . . . . . . . . . . . 26
2.4.3 Les conversions arithmetiques habituelles . . . . . . . . . 26
2.4.4 Les surprises de la conversion de type . . . . . . . . . . . 27
2.5 Principales fonctions dentrees-sorties standard . . . . . . . . . . 27
2.5.1 La fonction getchar . . . . . . . . . . . . . . . . . . . . . 28
2.5.2 La fonction putchar . . . . . . . . . . . . . . . . . . . . . 28
2.5.3 La fonction puts . . . . . . . . . . . . . . . . . . . . . . . 28
2.5.4 La fonction decriture `a lecran formattee printf . . . . . 29
2.5.5 La fonction de saisie scanf . . . . . . . . . . . . . . . . . 31
3 Les pointeurs 33
3.1 Declaration dun pointeur . . . . . . . . . . . . . . . . . . . . . . 34
3.2 Operateurs de manipulation des pointeurs . . . . . . . . . . . . . 34
3.2.1 Loperateur adresse de & . . . . . . . . . . . . . . . . . . 34
3.2.2 Loperateur contenu de : * . . . . . . . . . . . . . . . . . 35
3.3 Initialisation dun pointeur . . . . . . . . . . . . . . . . . . . . . 36
3.4 Arithmetique des pointeurs . . . . . . . . . . . . . . . . . . . . . 37
3.5 Allocation dynamique de memoire . . . . . . . . . . . . . . . . . 38
3.6 Liberation dynamique avec la fonction free . . . . . . . . . . . . 40
4 Les types derives 41
4.1 Les enumerations . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2 Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2.1 Initialisation dun tableau . . . . . . . . . . . . . . . . . . 42
4.2.2 Tableaux multidimensionnels . . . . . . . . . . . . . . . . 44
4.2.3 Passage de tableau en param`etre . . . . . . . . . . . . . . 45
4.2.4 Relation entre tableaux et pointeurs . . . . . . . . . . . . 47
4.2.5 Cas des tableaux de chanes de caract`eres . . . . . . . . . 49
4.2.6 Gestion des arguments de la ligne de commande . . . . . 50
4.3 Les structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.3.1 Initialisation et aectation dune structure . . . . . . . . . 52
4.3.2 Comparaison de structures . . . . . . . . . . . . . . . . . 52
4.3.3 Tableau de structures . . . . . . . . . . . . . . . . . . . . 52
4.3.4 Pointeur vers une structure . . . . . . . . . . . . . . . . . 53
4.3.5 Structures auto-referees . . . . . . . . . . . . . . . . . . . 53
4.4 Les unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.4.1 Declaration dune union . . . . . . . . . . . . . . . . . . . 55
4.4.2 Utilisation pratique des unions . . . . . . . . . . . . . . . 56
4.4.3 Une methode pour alleger lacc`es aux membres . . . . . . 57
4.5 Les champs de bits . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.6 Denition de synonymes de types avec typedef . . . . . . . . . . 58
4
5 Retour sur les fonctions 59
5.1 Declaration et denition dune fonction . . . . . . . . . . . . . . 59
5.2 Appel dune fonction . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.3 Duree de vie des identicateurs . . . . . . . . . . . . . . . . . . . 61
5.4 Portee des variables . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.4.1 Variables globales . . . . . . . . . . . . . . . . . . . . . . 62
5.4.2 Variables locales . . . . . . . . . . . . . . . . . . . . . . . 63
5.5 Recursivite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.6 Passage de param`etres `a une fonction . . . . . . . . . . . . . . . 64
5.6.1 Generalites . . . . . . . . . . . . . . . . . . . . . . . . . . 64
5.6.2 Passage des param`etres par valeur . . . . . . . . . . . . . 65
5.6.3 Passage des param`etres par adresse . . . . . . . . . . . . . 65
5.6.4 Passage de tableau en param`etre . . . . . . . . . . . . . . 66
5.7 Fonction `a nombre variable de param`etres . . . . . . . . . . . . . 67
5.8 Pointeurs sur une fonction . . . . . . . . . . . . . . . . . . . . . . 69
6 Gestion des chiers 71
6.1 Ouverture et fermeture de chiers . . . . . . . . . . . . . . . . . . 71
6.1.1 Ouverture de chiers : la fonction fopen . . . . . . . . . . 71
6.1.2 Fermeture de chiers : la fonction fclose . . . . . . . . . 73
6.2 Les entrees-sorties formatees . . . . . . . . . . . . . . . . . . . . . 73
6.2.1 La fonction decriture en chier fprintf . . . . . . . . . . . 73
6.2.2 La fonction de saisie en chier fscanf . . . . . . . . . . . 73
6.3 Impression et lecture de caract`eres dans un chier . . . . . . . . 74
6.3.1 Lecture et ecriture par caract`ere : fgetc et fputc . . . . 74
6.3.2 Lecture et ecriture optimisees par caract`ere : getc et putc 74
6.3.3 Relecture dun caract`ere . . . . . . . . . . . . . . . . . . . 75
6.3.4 Les entrees-sorties binaires : fread et fwrite . . . . . . . 76
6.3.5 Positionnement dans un chier : fseek, rewind et ftell 77
7 Les directives du preprocesseur 79
7.1 La directive #include . . . . . . . . . . . . . . . . . . . . . . . . 79
7.2 La directive #define . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.2.1 Denition de constantes symboliques . . . . . . . . . . . . 80
7.2.2 Les macros avec param`etres . . . . . . . . . . . . . . . . . 80
7.3 La compilation conditionnelle . . . . . . . . . . . . . . . . . . . . 81
7.3.1 Condition liee `a la valeur dune expression . . . . . . . . . 82
7.3.2 Condition liee `a lexistence dun symbole . . . . . . . . . 82
7.3.3 Loperateur defined . . . . . . . . . . . . . . . . . . . . . 83
7.3.4 La commande #error . . . . . . . . . . . . . . . . . . . . 83
7.3.5 La commande #pragma . . . . . . . . . . . . . . . . . . . 84
8 La programmation modulaire 85
8.1 Principes elementaires . . . . . . . . . . . . . . . . . . . . . . . . 85
8.2 Eviter les erreurs dinclusions multiples . . . . . . . . . . . . . . 87
8.3 La compilation separee . . . . . . . . . . . . . . . . . . . . . . . . 88
8.4 Resume des r`egles de programmation modulaire . . . . . . . . . . 88
5
8.5 Loutils make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
8.5.1 Principe de base . . . . . . . . . . . . . . . . . . . . . . . 89
8.5.2 Creation dun Makefile . . . . . . . . . . . . . . . . . . . 89
8.5.3 Utilisation de macros et de variables . . . . . . . . . . . . 90
9 La biblioth`eque standard 93
9.1 Diagnostics derreurs <assert.h> . . . . . . . . . . . . . . . . . . 93
9.2 Gestion des nombres complexes <complex.h> . . . . . . . . . . . 94
9.3 Classication de caract`eres et changements de casse <ctype.h> . 94
9.4 Valeur du dernier signal derreur <errno.h> . . . . . . . . . . . . 95
9.5 Gestion dun environnement `a virgule ottante <fenv.h> . . . . 95
9.5.1 Gestion des exceptions . . . . . . . . . . . . . . . . . . . . 95
9.5.2 Gestion des arrondis . . . . . . . . . . . . . . . . . . . . . 96
9.5.3 Gestion des environnements en virgule ottante. . . . . . 96
9.6 Intervalle et precision des nombres ottants <float.h> . . . . . . 96
9.7 Denitions de types entiers de taille xee <inttypes.h> . . . . . 96
9.8 Alias doperateurs logiques et binaires <iso646.h> . . . . . . . . 97
9.9 Intervalle de valeur des types entiers <limits.h> . . . . . . . . . 97
9.10 Gestion de lenvironnement local <locale.h> . . . . . . . . . . . 97
9.11 Les fonctions mathematiques de <math.h> . . . . . . . . . . . . . 98
9.11.1 Fonctions trigonometriques et hyperboliques . . . . . . . . 98
9.11.2 Fonctions exponentielles et logarithmiques . . . . . . . . . 98
9.11.3 Fonctions diverses . . . . . . . . . . . . . . . . . . . . . . 98
9.12 Branchements non locaux <setjmp.h> . . . . . . . . . . . . . . . 98
9.13 Manipulation des signaux <signal.h> . . . . . . . . . . . . . . . 99
9.14 Nombre variable de param`etres <stdarg.h> . . . . . . . . . . . . 99
9.15 Denition du type booleen <stdbool.h> . . . . . . . . . . . . . . 99
9.16 Denitions standards <stddef.h> . . . . . . . . . . . . . . . . . . 99
9.17 Denitions de types entiers <stdint.h> . . . . . . . . . . . . . . 100
9.18 Entrees-sorties <stdio.h> . . . . . . . . . . . . . . . . . . . . . . 100
9.18.1 Manipulation de chiers . . . . . . . . . . . . . . . . . . . 100
9.18.2 Entrees et sorties formatees . . . . . . . . . . . . . . . . . 100
9.18.3 Impression et lecture de caract`eres . . . . . . . . . . . . . 100
9.19 Utilitaires divers <stdlib.h> . . . . . . . . . . . . . . . . . . . . 101
9.19.1 Allocation dynamique . . . . . . . . . . . . . . . . . . . . 101
9.19.2 Conversion de chanes de caract`eres en nombres . . . . . . 101
9.19.3 Generation de nombres pseudo-aleatoires . . . . . . . . . 101
9.19.4 Arithmetique sur les entiers . . . . . . . . . . . . . . . . . 102
9.19.5 Recherche et tri . . . . . . . . . . . . . . . . . . . . . . . . 102
9.19.6 Communication avec lenvironnement . . . . . . . . . . . 102
9.20 Manipulation de chanes de caract`eres <string.h> . . . . . . . . 103
9.21 Macros generiques pour les fonctions mathematiques <tgmath.h> 103
9.22 Date et heure <time.h> . . . . . . . . . . . . . . . . . . . . . . . 104
9.23 Manipulation de caract`eres etendus <wchar.h> et <wctype.h> . 104
6
A Etude de quelques exemples 106
A.1 Gestion des arguments de la ligne de commande . . . . . . . . . 106
A.2 Exemple de liste chanee . . . . . . . . . . . . . . . . . . . . . . . 110
B Makele generique 112
C Le betisier 116
C.1 Erreur avec les operateurs . . . . . . . . . . . . . . . . . . . . . . 116
C.1.1 Erreur sur une comparaison . . . . . . . . . . . . . . . . . 116
C.1.2 Erreur sur laectation . . . . . . . . . . . . . . . . . . . . 116
C.2 Erreurs avec les macros . . . . . . . . . . . . . . . . . . . . . . . 116
C.2.1 Un #define nest pas une declaration . . . . . . . . . . . 117
C.2.2 Un #define nest pas une initialisation . . . . . . . . . . 117
C.2.3 Erreur sur macro avec param`etres . . . . . . . . . . . . . 117
C.2.4 Erreur avec les eets de bord . . . . . . . . . . . . . . . . 117
C.3 Erreurs avec linstruction if . . . . . . . . . . . . . . . . . . . . . 117
C.4 Erreurs avec les commentaires . . . . . . . . . . . . . . . . . . . . 118
C.5 Erreurs avec les priorites des operateurs . . . . . . . . . . . . . . 118
C.6 Erreur avec linstruction switch . . . . . . . . . . . . . . . . . . 119
C.6.1 Oubli du break . . . . . . . . . . . . . . . . . . . . . . . . 119
C.6.2 Erreur sur le default . . . . . . . . . . . . . . . . . . . . 119
C.7 Erreur sur les tableaux multidimensionnels . . . . . . . . . . . . 119
C.8 Erreur avec la compilation separee . . . . . . . . . . . . . . . . . 119
C.9 Liens utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
7