Une fonction est une séquence d'instructions identifiée par un nom, appliquée à des paramètres d'un certain type et retournant une valeur d'un type donné.
Déclarer une fonction consiste à spécifier le type du résultat de la fonction, l'identificateur associé à cette fonction, la liste de ses paramètres ainsi que leurs types et, enfin, le corps de la fonction. La liste des paramètres est délimitée par « ( » et « ) », le corps de la fonction par « { » et « } ».
Nous avons vu qu'un sous-programme appelant peut communiquer des valeurs au sous-programme appelé. Mais est-il possible pour un sous-programme appelé de communiquer une valeur au sous-programme appelant ? La réponse est oui. Une fonction est un sous-programme qui communique une valeur au sous-programme appelant. Cette valeur s'appelle valeur de retour, ou valeur retournée.
Le code suivant définit une fonction nom_fonction renvoyant une valeur de type type_retour et prenant N arguments, par1 de type type1, par2 de type type2, etc.
type_retour nom_fonction(type1 par1, type2 par2, /* ..., */ typeN parN)
{
/* Déclarations de variables ... */
/* Instructions ... */
return valeur_retounée;
}
L'exécution d'une fonction se termine soit lorsque l'accolade fermante est atteinte, soit lorsque le mot clef return est rencontré. La valeur renvoyée par une fonction est donnée comme paramètre à return.
Les passages des arguments aux fonctions se font toujours par valeur. Si on veut modifier la valeur d'un argument passé en paramètre à une fonction, en dehors de cette même fonction, il faut utiliser des pointeurs. Pour le moment nous allons nous intéresser au passage des arguments par valeur.
Nous allons définir une fonction carre qui retourne le carré de la valeur qui lui est passée en paramètre.
#include <stdio.h>
int carre (int a)
{
int b ;
b = a * a ;
return b ;
}
int main ( )
{
int nb ;
printf("Donnez un nombre \n") ;
scanf("%d ", &nb) ;
printf("Le carré de %d est %d \n ",nb,carre(nb) ) ;
return 0 ;
}
On peut aussi faire le calcul dans le return comme le montre l'exemple suivant :
#include <stdio.h>
int carre (int a)
{
return a*a ;
}
int main ( )
{
int nb ;
printf("Donnez un nombre \n") ;
scanf("%d ", &nb) ;
printf("Le carré de %d est %d \n ",nb,carre(nb) ) ;
return 0 ;
}
Vous remarquez au passage que main est aussi une fonction. main est exécutée automatiquement au lancement du programme.