Le prototype d'une fonction correspond simplement à son en-tête (tout ce qui précède la première accolade ouvrante). C'est-à-dire son nom, son type de retour et les types des différents paramètres. Cela permet au compilateur de vérifier que la fonction est appelée avec le bon nombre de paramètres et surtout avec les bons types.
À noter que les noms des paramètres peuvent être omis et que la déclaration doit se terminer par un point-virgule (;), sans quoi vous pourrez vous attendre à une cascade d'erreurs.
double puissance(double,double);
Ce prototype informe le compilateur que la fonction puissance accepte deux arguments de types double, et retourne un résultat de type double. Le type de chaque argument peut être suivi d'un nom.Celui-ci n'aura toutefois pas plus de valeur qu'un commentaire,sa portée étant uniquement confinée au prototype de la fonction.
double puissance(double base, double exposant);
Le nom du premier paramètre base et le deuxième paramètre exposant sont facultatifs et ne seront utiles que pour la lisibité du code, dans ce cas on parle de "prototype étendu".
Le prototype d'une fonction doit normalement être décrit avant sa première utilisation.
Un tel prototype permet au compilateur de « vérifier » que l'utilisation de la fonction est conforme à sa définition.
Les procédures étant comme des fonctions qui ne retournent aucune valeur sont déclarées de type void.Par exemple :
void nom_struct(type1,type2,....,typeN);
Pour déclarer une fonction qui n'a pas d'argument, on utilise le spécificateur de type void dans la liste des arguments.
int nom_fonction(void);
Les déclarations de fonctions devraient toujours se faire sous la forme de prototypes. Toutes les fonctions C standard sont définies dans plusieurs fichiers d'en-têtes. Par exemple,math.h contient les prototypes de toutes les fonctions mathématiques cos , sin , pow , etc. tandis que stdio.h contient les prototypes des fonctions d'entrée-sortie standard.
Pour illustrer le propos traitant un exemple concret de tout ce qu'on a vu jusqu'à maintenant.
/* Ceci est le contenu du fichier exemple.h dans lequel on va déclarer toutes les fonctions qu'on aura besoin dans notre programme principal.*/ int somme(int , int); int multi(int , int);
Puis on crée un nouveau fichier exemple.c dans lequel on va définir les fonctions déjà déclarées.
/* Ceci est le contenu du fichier exemple.c */
int somme(int a,int b)
{
return a+b;
}
int multi(int a, int b)
{
return a*b;
}
Maintenant que nos fonctions sont déclarées et définis comment les inclure dans le programme principal ?
C'est simple on va utiliser la même méthode d'inclusion du bibliothèque à la petite différence au lieu de < et > on va utiliser les doubles quotes " " , ainsi on va procéder de la sorte :
#include <stdio.h>
#include "exemple.h"
int main()
{
int nb1 , nb2;
printf("Donner deux entiers \n");
scanf("%d ,%d", &nb1,&nb2);
printf("La somme de %d et %d est %d \n", nb1,nb2,somme(nb1,nb2));
printf("%d multiplier par %d vaut %d",nb1,nb2,multi(nb1,nb2));
return 0;
}
Cette méthode est la plus conseillée car souvent dans les gros programmes on se perd facilement dans le code dès qu'il dépasse une certaine longueur, généralement le main ne doit pas contenir aucune définition de fonction , on crée plusieurs fichier .c auxquels on associe des fichier .h qui porte le même nom dans lesquels on déclare les fonctions définis dans les fichiers .c .