C_facile : Introduction au langage C
Cours

Déclaration d'une fonction et compilation

Syntaxe

La déclaration d'une fonction se réalise de la manière suivante :

type identificateur_de_la_fonction(liste de paramètres formels) bloc

Exemple

Ci-dessous, un exemple de déclaration fonction et des explications sur ce qui se passe lors de la compilation :

int plus_un(int a)

                         /* identificateur de la fonction et paramètre */

{

                        /* début du bloc de function */

  int inter;

  inter = a+1;

  return inter;

}

  1. La première ligne « int plus_un(int a) » définit l'en-tête de la fonction.

  2. Ensuite nous trouvons un bloc qui commence par '{' et se termine par '}'.

  3. Examinons l'en-tête de la gauche vers la droite :

    • int est le type de valeur retournée par la fonction

    • plus_un est l'identificateur de la fonction

    • le délimiteur '(' commence la liste des paramètres formels

    •  int est le type du paramètre formel

    • a est l'identificateur du paramètre formel  le délimiteur ')' ferme la liste de paramètres formels

Fondamental

La liste de paramètres formels est obligatoire même si elle est vide. En résumé, les « (« et « ) » sont obligatoires. La notion de paramètre formel est fondamentale.

Quand on déclare une fonction, on ne sait pas encore quelle valeur exacte nous lui transmettrons quand nous l'utiliserons. Cependant, nous avons besoin d'indiquer au compilateur que l'on va transmettre une valeur à la fonction et que cette valeur devra être recopiée pour que la fonction puisse l'utiliser. C'est pourquoi on décrit formellement le type de la donnée et qu'on lui donne un identificateur pour nom.

Nous avons là encore un couple (identificateur, réceptacle). La valeur de la donnée sera recopiée dans le réceptacle au moment de l'appel (invocation, utilisation) de la fonction et nous pouvons l'utiliser car il a un identificateur, c'est-à-dire un nom.

A la suite de la déclaration, nous trouvons le bloc de la fonction :

Attention

Attention, ce n'est pas exactement la même chose qu'une variable. Il s'agit d'un paramètre formel.

A ce stade, un paramètre formel peut être vu comme une variable dotée en plus d'un mécanisme de recopie automatique d'informations (Attention, ce n'est pas la seule différence).

Fondamental

A la suite de la déclaration, nous trouvons le bloc de la fonction :

{

 int inter;

 inter = a+1;

 return inter;

}

Nous déclarons une variable « inter », c'est la variable locale de la fonction « plus_un ». Quand on évoque la notion de variable locale il faut toujours préciser à quelle fonction elle est locale.

Puis, suit l'instruction « inter = a+1 ». Qui met en jeu la variable locale « inter » et le paramètre formel « a ». Puisque nous sommes dans le bloc de la fonction, ces deux identificateurs sont parfaitement définis et le compilateur accepte de générer l'instruction machine correspondante. Il va prendre la valeur du paramètre formel « a », ajouter 1, et ranger le résultat dans la variable locale "inter".

Enfin, nous avons l'instruction “return inter”. Le mot réservé “return” est utilisé au sein de la déclaration du bloc de la fonction pour mettre en place le mécanisme qui permet à la fonction de retourner de l'information. La fonction est de type « int» et cette fonction retourne la valeur contenue dans la variable locale "inter" qui est elle-même un entier. Cette opération est donc licite.

Le “return” permet au compilateur de mettre en place non seulement le mécanisme de transmission du résultat de la fonction, mais aussi le mécanisme de branchement pour revenir à l'instruction qui suit l'invocation de la fonction. L'instruction « return » ne peut être utilisée que dans une fonction. Elle retourne la valeur d'une expression.

Si la fonction est de type « void » il ne faut pas utiliser « return ».

A ce stade, quand le compilateur a terminé de compiler cette déclaration de fonction, toutes les informations et mécanismes nécessaires à son usage sont définis et prêts à être utilisés. De plus, les instructions de la fonction ont été compilées et rangées. Le compilateur sait exactement où les instructions sont rangées afin de réaliser les branchements. C'est lui qui gère cela, pas vous.

Invocation d'une fonction (page suivante)Comment fonctionne l'invocation d'une fonction de bibliothèque ? (page Précédente)
AccueilImprimer creativecommons : by-nc-ndRéalisé avec SCENARI