© Éditions Eyrolles
105
chapitre n° 6
La programmation modulaire et les fonctions
des emplacements nommés a et b. C’est effectivement sur ces copies qu’a travaillé la fonction
echange, de sorte que les valeurs des variables n et p n’ont, quant à elles, pas été modifiées.
C’est ce qui explique le résultat constaté.
Ce mode de transmission semble donc interdire a priori qu’une fonction produise une ou
plusieurs valeurs en retour, autres que celle de la fonction elle-même.
Or, il ne faut pas oublier qu’en C tous les modules doivent être écrits sous forme de fonction.
Autrement dit, ce simple problème d’échange des valeurs de deux variables doit pouvoir se
résoudre à l’aide d’une fonction.
Nous verrons que ce problème possède plusieurs solutions, à savoir :
●
Transmettre en argument la valeur de l’adresse d’une variable. La fonction pourra éventuellement agir sur le contenu de cette adresse. C’est précisément ce que nous faisons
lorsque nous utilisons la fonction scanf. Nous examinerons cette technique en détail dans
le chapitre consacré aux pointeurs.
●
Utiliser des variables globales, comme nous le verrons dans le prochain paragraphe ; cette
deuxième solution devra toutefois être réservée à des cas exceptionnels, compte tenu des
risques qu’elle présente (effets de bords).
C’est bien parce que la transmission des arguments se fait « par valeur » que les arguments
effectifs peuvent prendre la forme d’une expression quelconque. Dans les langages où le seul
mode de transmission est celui « par adresse », les arguments effectifs ne peuvent être que
l’équivalent d’une lvalue.
La norme n’impose aucun ordre pour l’évaluation des différents arguments d’une fonction lors
de son appel. En général, ceci est de peu d’importance, excepté dans une situation (fortement
déconseillée !) telle que :
int i = 10 ;
...
f (i++, i) ;
/* on peut calculer i++ avant i --> f (10, 11) */
/*
ou après i --> f (10, 10) */
7 Les variables globales
Nous avons vu comment échanger des informations entre différentes fonctions grâce à la
transmission d’arguments et à la récupération d’une valeur de retour.
En fait, en C, plusieurs fonctions (dont, bien entendu le programme principal main) peuvent
partager des variables communes qu’on qualifie alors de globales.
La norme ANSI ne parle pas de variables globales, mais de variables externes. Le terme « global »
illustre plutôt le partage entre plusieurs fonctions tandis que le terme « externe » illustre plutôt le partage entre plusieurs fichiers source. En C, une variable globale est partagée par plusieurs fonctions ;
elle peut être (mais elle n’est pas obligatoirement) partagée entre plusieurs fichiers source.
Delannoy Livre.book Page 105 Mercredi, 6. mai 2009 4:26 16
Précédent

- 118/281

Suivant