Chapitre 6 : Les fonctions

    Jusque là nous n’avons vu qu’une fonction dans nos programmes. Il s’agissait de la fonction main présente dans TOUT les programmes C et qui est toujours exécutée en première. Cependant, depuis le début, tout nos programme ne font que quelques dizaines de lignes et donc on pouvait écrire, sans problème majeur, l’intégralité de notre programme dans la fonction main. Mais il faut savoir qu’en C, il est fortement déconseillé de faire cela, c’est pourquoi il existe la possibilité de créer des fonctions.

         1 – Qu’est ce qu’une fonction ?

    Le but principal d’une fonction est de retourner 1 résultat. Après avoir exécutée plusieurs instructions qui lui sont associées. Par exemple une fonction peut s’occuper de renvoyer différence de deux nombres, …
Pour qu’une fonction puisse s’exécuter convenablement il faut qu’elle reçoive, ce que l’on appel des arguments (ou paramètres).
Une fois ces paramètres reçues la fonction s’exécute et renvoie un résultat final.

Les fonctions nous serviront donc pour ne pas surcharger notre fonction main et donc garder le maximum de lisibilité pour repérer d’éventuels bugs ou erreurs (et oui ça arrive )

Au fait savez vous que vous avez déjà fait appel à des fonctions sans le savoir dans votre code ?

Hein ?


Oui, lorsque vous utilisez printf et bien c’est une fonction à laquelle on envoyait des arguments pour la faire fonctionner, on appel cela un appel de fonction, cependant le fonctionnement de printf étant un peu compliqué pour les novices que nous sommes, nous n’allons pas nous attarder dessus, sachez juste que pour utiliser une fonction on l »appel » dans le programme et que tout programme C comporte au moins 1 fonction : la fonction main.

Nous allons maintenant apprendre à créer nos propres fonctions et à les utiliser dans nos programmes.

         2 – Créer une fonction et l’utiliser

    Pour créer une fonction, il faut préciser plusieurs choses :

Code c:
type nom(parametres)
{
/* … */
}


Le type de la fonction : C’est en fait le type de nombre que renverra la fonction à la fin de son exécution (int, long, float, double, …)
Son nom : pour pouvoir l’appeler dans un programme il faut au préalable lui avoir donner un nom par exemple : addition
Les paramètres : ce sont par exemple les nombres que vous allez envoyer à la fonction , elles peut avoir un nombre quelconque de paramètres. Il ‘écrire le type des paramètres lorsqu’on créer une fonction.


Je vous ai dit tout à l’heure que le but principal d’une fonction était de retourner une valeur. Et bien on fait cela dans une fonction à l’aide du mot-clé return situé la plupart du temps à la fin des instructions nécessaires pour l’envoie de la valeur voulue par l’utilisateur. En gros lorsqu’on fait un appel de fonction , on demande à cette fonction de nous renvoyer une valeur à l’aide des paramètres qu’on lui envoie et elle rnous les renvoie à l’aide de return

Enfin sachez une fonction doit se trouver en dehors du bloc main et tout comme dans notre fonction main les instructions à l’intérieur d’une fonction doivent impérativement se trouver entre accolades! Il faut également créer sa fonction avant le main car si vous la créez après le compilateur peu ne pas « savoir » à quelle fonction vous faites références lorsque vous l’appelez dans le main (ou ailleurs). Voici donc à quoi peut ressembler une fonction :

Code c:
#include <stdlib.h>
#include <stdio.h>


int fonction(int parametre1 , int parametre2) /* N’oubliez pas les types des paramètres */
{
/* …*/

return resultat
}


int main ()
{


/* code du main */

fonction(parametre1, parametre2);
/* appel de la fonction à laquelle on envoie les paramètres nécessaires au bon fonctionnement de notre fonction, ici : parametre1 et parametre2 */

/*Code du main */


} /* fin du bloc main */


Voilà maintenant que vous savez créer des fonctions, nous allons donc faire un petit exemple pour nous entrainer.
Imaginons que dans votre programme C vous souhaitez créer une fonction qui additionne deux nombres que vous envoyez en tant que paramètres. Voici donc comment vous devrez procéder :

Code c:
int fonction (int nombre1, int nombre2)
{
return nombre1 + nombre2;
}


int main()
{
int nombre1 = 1;
int nombre2 = 2;
int resultat = 0;

/* On donne pour valeur a la variable resultat, la valeur renvoyée par la fonction */
resultat = fonction(nombre1, nombre2);

printf(« %d + %d = %d »,nombre1, nombre2, resultat);

return 0;
}



Ce qui nous affiche normalement :

Code console:
1 + 2 = 3

         4 – Le cas void

    Il est possible en C de créer des fonctions sans paramètres ou ne renvoyant aucune valeur. Pour cela on utilise un type prévu à cette effet : void

On utilise ce type pour des fonctions censées affichées uniquement des messages par exemple.

Comme par exemple :

Code c:
void afficherBonjour(void) /* pas de paramètres donc void */
{
printf(« Bonjour !n »);
}

int main ()
{
afficherBonjour();

return 0;
}


Ce qui doit nous donner :

Code console:
Bonjour !


Remarque : pour gagner du temps on peut ne pas mettre void dans la parenthèses d’envoie des paramètres et donc avoir afficherBonjour() au lieu de afficherBonjour(void). En revanche n’oubliez pas de le mettre lorsque vous précisez le type de votre fonction


Vous pouvez aussi avoir une fonction de type int par exemple mais ne prenant aucun paramètres.
Exemple :

Code c:
int maFonction () /* pas de paramètres ici */
{
return 3;
}


Cette fonction renverra bien un int mais on ne lui envoie pas de paramètres lorsqu’on l’appel.

         5 – Astuces et mise en garde

    Tout à l’heure je vous ai dit de placer vos fonctions avant le bloc main. Pour certains cette solution va vite devenir pénible. Si vous souhaitez placer vos fonctions après le main, il va falloir placer ce qu’on appel, un prototype de fonction en début de code pour signaler au compilateur que votre fonction est bien dans le programme. Pour cela rien de plus simple, il vous suffit de reprendre, à la lettre près, la déclaration de votre fonction et d’y ajouter un point-virgule.

exemple :

Code c:
int maFonction ();


Vous pourrez ensuite placer votre fonction en dessous du main.

Attention avec les types !

Quand on est débutant on fait très souvent des erreurs avec les types de fonctions, ainsi on envoie comme paramètres des variables de type double mais votre fonction est de type int, donc le résultat que vous recevez est sans virgule. Il alors vous essayer de renvoier une variable de type long, par exemple, dans une fonction de type void (qui n’est censé ne rien renvoyé ! [pas de return machin donc !])

Au début tout ça est assez compliqué mais vous verrez que les fonctions sont essentiels dans un programme !

Entrainez vous et si vous avez des questions n’hésitez pas à les poser sur le forum

Dans le prochain chapitre nous attaquerons un point sensible en C, les pointeurs. Il est nécessaire d’être au point avec les fonctions avant d’attaquer ce chapitre car à partir de maintenant l’essentiel de nos programmes en comportera !