© Éditions Eyrolles
101
chapitre n° 6
La programmation modulaire et les fonctions
4 Les fonctions et leurs déclarations
4.1 Les différentes façons de déclarer (ou de ne pas déclarer) une fonction
Dans notre exemple du paragraphe 2, nous avions fourni la définition de la fonction fexple
après celle de la fonction main. Mais nous aurions pu tout aussi bien faire l’inverse :
float fexple (float x, int b, int c)
{
....
}
main()
{
float fexple (float, int, int) ; /* déclaration de la fonc. fexple */
.....
y = fexple (x, n, p) ;
.....
}
En toute rigueur, dans ce cas, la déclaration de la fonction fexple (ici, dans main) est facultative, car, lorsqu’il traduit la fonction main, le compilateur connaît déjà la fonction fexple.
Néanmoins, nous vous déconseillons d’omettre la déclaration de fexple dans ce cas ; en
effet, il est tout à fait possible qu’ultérieurement vous soyez amené à modifier votre programme
source ou même à l’éclater en plusieurs fichiers source comme l’autorisent les possibilités de
compilation séparée du langage C.
Par ailleurs, le langage C (mais pas le C++) vous permet d’effectuer des déclarations partielles
en ne mentionnant pas le type des arguments ; ainsi, dans notre exemple du paragraphe 2, nous
pourrions déclarer fexple de cette façon dans la fonction main :
float fexple () ;
Qui plus est, C vous autorise à ne pas déclarer du tout une fonction qui renvoie une valeur de
type int (là encore, ce sera interdit en C++ ainsi qu’en C99).
Nous ne saurions trop vous conseiller d’éviter de telles possibilités. Toutefois, sachez que vous
risquez d’employer la dernière sans y prendre garde. En effet, toute fonction que vous utiliserez
sans l’avoir déclarée sera considérée par le compilateur comme ayant des arguments quelconques et fournissant un résultat de type int. Les conséquences en seront différentes suivant
que ladite fonction est ou non fournie dans le même fichier source. Dans le premier cas, on
obtiendra bien une erreur de compilation ; dans le second, en revanche, les conséquences
n’apparaîtront (de manière plus ou moins voilée) que lors de l’exécution !
Delannoy Livre.book Page 101 Mercredi, 6. mai 2009 4:26 16
101
chapitre n° 6
La programmation modulaire et les fonctions
4 Les fonctions et leurs déclarations
4.1 Les différentes façons de déclarer (ou de ne pas déclarer) une fonction
Dans notre exemple du paragraphe 2, nous avions fourni la définition de la fonction fexple
après celle de la fonction main. Mais nous aurions pu tout aussi bien faire l’inverse :
float fexple (float x, int b, int c)
{
....
}
main()
{
float fexple (float, int, int) ; /* déclaration de la fonc. fexple */
.....
y = fexple (x, n, p) ;
.....
}
En toute rigueur, dans ce cas, la déclaration de la fonction fexple (ici, dans main) est facultative, car, lorsqu’il traduit la fonction main, le compilateur connaît déjà la fonction fexple.
Néanmoins, nous vous déconseillons d’omettre la déclaration de fexple dans ce cas ; en
effet, il est tout à fait possible qu’ultérieurement vous soyez amené à modifier votre programme
source ou même à l’éclater en plusieurs fichiers source comme l’autorisent les possibilités de
compilation séparée du langage C.
Par ailleurs, le langage C (mais pas le C++) vous permet d’effectuer des déclarations partielles
en ne mentionnant pas le type des arguments ; ainsi, dans notre exemple du paragraphe 2, nous
pourrions déclarer fexple de cette façon dans la fonction main :
float fexple () ;
Qui plus est, C vous autorise à ne pas déclarer du tout une fonction qui renvoie une valeur de
type int (là encore, ce sera interdit en C++ ainsi qu’en C99).
Nous ne saurions trop vous conseiller d’éviter de telles possibilités. Toutefois, sachez que vous
risquez d’employer la dernière sans y prendre garde. En effet, toute fonction que vous utiliserez
sans l’avoir déclarée sera considérée par le compilateur comme ayant des arguments quelconques et fournissant un résultat de type int. Les conséquences en seront différentes suivant
que ladite fonction est ou non fournie dans le même fichier source. Dans le premier cas, on
obtiendra bien une erreur de compilation ; dans le second, en revanche, les conséquences
n’apparaîtront (de manière plus ou moins voilée) que lors de l’exécution !
Delannoy Livre.book Page 101 Mercredi, 6. mai 2009 4:26 16
