Programmer en langage C
94 © Éditions Eyrolles
1La fonction : la seule sorte de module existant en C
Dans certains langages, on trouve deux sortes de modules, à savoir :
●Les fonctions, assez proches de la notion mathématique correspondante. Notamment, une
fonction dispose d’arguments (en C, comme dans la plupart des autres langages, une fonc-
tion peut ne comporter aucun argument) qui correspondent à des informations qui lui sont
transmises et elle fournit un unique résultat scalaire (simple) ; désigné par le nom même de
la fonction, ce dernier peut apparaître dans une expression. On dit d’ailleurs que la fonc-
tion possède une valeur et qu’un appel de fonction est assimilable à une expression.
●Les procédures (terme Pascal) ou sous-programmes (terme Fortran ou Basic) qui élargissent
la notion de fonction. La procédure ne possède plus de valeur à proprement parler et son
appel ne peut plus apparaître au sein d’une expression. Par contre, elle dispose toujours
d’arguments. Parmi ces derniers, certains peuvent, comme pour la fonction, correspondre
à des informations qui lui sont transmises. Mais d’autres, contrairement à ce qui se passe
pour la fonction, peuvent correspondre à des informations qu’elle produit en retour de son
appel. De plus, une procédure peut réaliser une action, par exemple afficher un message
(en fait, dans la plupart des langages, la fonction peut quand même réaliser une action,
bien que ce ne soit pas là sa vocation).
En C, il n’existe qu’une seule sorte de module, nommé fonction (il en ira de même en C++ et
en Java, langage dont la syntaxe est proche de celle de C). Ce terme, quelque peu abusif, pour-
rait laisser croire que les modules du C sont moins généraux que ceux des autres langages. Or
il n’en est rien, bien au contraire ! Certes, la fonction pourra y être utilisée comme dans
d’autres langages, c’est-à-dire recevoir des arguments et fournir un résultat scalaire qu’on
utilisera dans une expression, comme, par exemple, dans :
y = sqrt(x)+3 ;
Mais, en C, la fonction pourra prendre des aspects différents, pouvant complètement dénaturer
l’idée qu’on se fait d’une fonction. Par exemple :
●La valeur d’une fonction pourra très bien ne pas être utilisée ; c’est ce qui se passe fré-
quemment lorsque vous utilisez printf ou scanf. Bien entendu, cela n’a d’intérêt que
parce que de telles fonctions réalisent une action (ce qui, dans d’autres langages, serait
réservée aux sous-programmes ou procédures).
●Une fonction pourra ne fournir aucune valeur.
●Une fonction pourra fournir un résultat non scalaire (nous n’en parlerons toutefois que
dans le chapitre consacré aux structures).
●Une fonction pourra modifier les valeurs de certains de ses arguments (il vous faudra tou-
tefois attendre d’avoir étudié les pointeurs pour voir par quel mécanisme elle y parviendra).
Ainsi, donc, malgré son nom, en C, la fonction pourra jouer un rôle aussi général que la procé-
dure ou le sous-programme des autres langages.
Delannoy Livre.book Page 94 Mercredi, 6. mai 2009 4:26 16