Fonctions avec arguments

Notre fonction cube_nombre n’est guère pratique, car elle ne permet de calculer que le cube de la variable nombre ; on pourrait bien sûr écrire une fonction comme celle-là pour chaque variable, mais ce serait fastidieux. Il est préférable d’écrire une fonction générale calculant le cube d’un nombre quelconque.

Voici une telle fonction :

int cube(int x)          {              return x * x * x;          }

Ici nous avons précisé un argument entre parenthèses, alors que cube_nombre n’en avait pas, ce qui s’exprimait par le terme void. L’argument est un entier, ce qui est exprimé par l’indication de type int. On lui donne le nom x pour la durée de la fonction, afin de pouvoir le désigner à l’intérieur de celle-ci ; cela n’est pas obligatoire mais, si on ne le faisait pas, on ne pourrait calculer le cube de cet argument, puisqu’on ne pourrait y faire référence.

A présent, dans le programme principal, on devra indiquer la valeur de l’argument (nommée le paramètre effectif) de cube avant d’appeler celle-ci, comme ceci :

cout << cube(nombre);

L’oubli du paramètre entraînerait une erreur de compilation (Error : Too few parameters in call to 'cube(int)', c’est-à-dire trop peu de paramètres dans l’appel de ‘cube(int)’).

Notons qu’une expression entière peut être passée en paramètre à cube, si son résultat est du type int :

cout << cube(nombre+1);

On obtient ainsi d’agréables raccourcis d’écriture.

Exercice 1.2

Comment écrirait-on

cube(cube(nombre))

sans utiliser de fonctions ?

Voir solution

Une fonction peut avoir autant d’arguments que souhaité, avec des types différents éventuellement. Par exemple, la fonction mathématique suivante, tirée de la librairie <math.h>, admet deux arguments, le premier de type double, le second de type int, et renvoie une valeur de type double :

double ldexp(double x, int exp);

D’autre part, il arrive que certaines fonctions ne renvoient aucun résultat (). Dans ce cas, elles sont déclarées avec pour résultat void ; ce mot réservé sert donc de « remplissage » soit pour une liste d’arguments vide, soit pour un résultat inexistant. Voici deux exemples tirés de la librairie <conio.h> :

void gotoxy(int x, int y) ; void clrscr(void);

Lorsqu’on désire arrêter le déroulement d’une telle fonction, on peut écrire une instruction return sans rien derrière ; en l’absence d’une telle instruction, la fonction se termine sur l’accolade fermante. Toutes les autres fonctions doivent avoir une instruction return, sinon elles renvoient un résultat aléatoire (un message d’erreur prévient de l’oubli dans certains cas : Error : Function should return a value, c’est-à-dire la fonction doit renvoyer une valeur).

Le concept de fonction est central en C++, et nous en verrons de nombreux exemples ultérieurement.

Précédent Précédent Sommaire Sommaire Suivant Suivant