Académique Documents
Professionnel Documents
Culture Documents
net
Pratique du langage C
Introduction Notions fondamentales Concepts avancs
Nathanal Cottin
22 dcembre 2006
Avant-propos
Ce document explique les principaux points dlicats du langage C Il na pas pour vocation dintroduire lensemble des lments du langage C, notamment syntaxiques, supposs connus Il aborde des concepts dutilisation volue du langage C
22 dcembre 2006
Pratique du langage C
Plan gnral
Partie 1 : Principaux types de donnes Partie 2 : Variables et pointeurs Partie 3 : Les tableaux Partie 4 : Passage de paramtres aux fonctions Annexes : Concepts volus du langage
22 dcembre 2006
Pratique du langage C
www.ncottin.net
22 dcembre 2006
Pratique du langage C
Types lmentaires
Type entier : long , int , short Type caractre : char Types rel : long double , double et float Type boolen : int , sachant que la valeur logique faux sexprime par 0 et vrai par toute autre valeur (gnralement 1) Types drivs ( unsigned , etc.)
22 dcembre 2006
Pratique du langage C
Pratique du langage C
Exemple :
int tab[] = {11, 22, 33, 44, 55};
22 dcembre 2006
Pratique du langage C
22 dcembre 2006
Pratique du langage C
Ainsi : FALSE = 0, TRUE = 1 FAUX = 0 et VRAI = 1 Donc : FALSE = FAUX = 0 et TRUE = VRAI = 1
Structure :
struct personne {char *nom; char *prenom;};
22 dcembre 2006 Pratique du langage C 9
22 dcembre 2006
Pratique du langage C
10
www.ncottin.net
22 dcembre 2006
Pratique du langage C
11
Dfinitions
Une dclaration de variable rserve un certain nombre de blocs en mmoire selon le type de cette variable. Le premier bloc mmoire occup est suppos rserv ladresse @ Un pointeur occupe une taille fixe (type entier) en mmoire. Il rfrence une variable (ou NULL)
22 dcembre 2006
Pratique du langage C
12
22 dcembre 2006
Pratique du langage C
13
22 dcembre 2006
Pratique du langage C
14
www.ncottin.net
22 dcembre 2006
Pratique du langage C
15
22 dcembre 2006
Pratique du langage C
16
Le tableau nest pas initialis Le dernier lment est rserv pour \0 Utilisation de free imprative
22 dcembre 2006
Pratique du langage C
17
22 dcembre 2006
Pratique du langage C
18
www.ncottin.net
22 dcembre 2006
Pratique du langage C
19
Dfinition
Une fonction est un sous-programme ralisant une partie du traitement demand Une fonction renvoie ou non une valeur On appelle procdure une fonction qui ne retourne aucun rsultat ( void ) Lexcution peut dpendre de paramtres donns lors de lappel de la fonction
22 dcembre 2006
Pratique du langage C
20
10
22 dcembre 2006
Pratique du langage C
22
11
Appel :
fonctionSimple(i);
Avant excution : i est empil Dbut dexcution : le haut de la pile est dpil ; param est une copie de i
22 dcembre 2006
Pratique du langage C
23
Appel :
autreFonction(p);
22 dcembre 2006
Pratique du langage C
24
12
Appel :
autreFonction(&i);
22 dcembre 2006
Pratique du langage C
25
22 dcembre 2006
Pratique du langage C
26
13
Dclaration correcte :
int echange(int *a, int *b) { int tmp = *b; *b = *a; *a = tmp; }
22 dcembre 2006 Pratique du langage C 27
22 dcembre 2006
Pratique du langage C
28
14
www.ncottin.net
22 dcembre 2006
Pratique du langage C
29
www.ncottin.net
22 dcembre 2006
Pratique du langage C
30
15
22 dcembre 2006
Pratique du langage C
31
Instructions lgales :
Passage de pi en tant que paramtre dune fonction Assignation de la valeur dune variable i : double i = pi; Drfrencement dans pointeur constant : const double *p = π
22 dcembre 2006
Pratique du langage C
32
16
Attention :
Instructions valides pour le compilateur ! Il sagit plus de conventions dcriture
22 dcembre 2006
Pratique du langage C
33
Corps de la fonction :
void testConst(const int *pParam) { *pParam = 1; }
Contrairement la dclaration de variables, le compilateur refuse de compiler linstruction dassignation de la valeur au paramtre constant
22 dcembre 2006 Pratique du langage C 34
/* Erreur de compilation */
17
www.ncottin.net
22 dcembre 2006
Pratique du langage C
35
Dfinition
Nom de fonction = pointeur constant sur la fonction Sa valeur correspond ladresse mmoire de la premire instruction de la fonction Il est possible de dclarer un pointeur (variable) destin rfrencer une fonction
22 dcembre 2006
Pratique du langage C
36
18
Dclaration
Exemple :
int (*pFonction)(const char *);
est une dclaration de prototype de fonction retournant un pointeur sur un entier et non un pointeur sur une fonction
22 dcembre 2006
Pratique du langage C
37
Appel
Exemple (suite) :
pFonction = puts; (*pFonction)("Appel de la fonction puts");
La signature de la fonction utilise (il sagit ici de puts ) doit correspondre la dclaration du pointeur sur fonction Les parenthses sont galement obligatoires
22 dcembre 2006
Pratique du langage C
38
19
Excution mmoire
La fonction puts est enregistre (comme toute autre fonction) une adresse en mmoire correspondant la premire instruction de son corps
pFonction = puts;
pFonction renvoie galement la premire instruction du bloc de puts
22 dcembre 2006 Pratique du langage C 39
www.ncottin.net
Annexe 3 Divers
22 dcembre 2006
Pratique du langage C
40
20
Fonctions inline
Valable pour les fonctions courtes Le compilateur neffectue pas dappel aux fonctions inline mais recopie directement leur code Exemple :
inline int plusGrandOuEgal(int a, int b) { return a >= b; }
22 dcembre 2006
Pratique du langage C
41
21
22 dcembre 2006
Pratique du langage C
43
22