Déclaration et appel de procédures

Principes généraux et compléments

Version Projecteur


Déclaration d'une procédure


procedure NomDeLaProcédure ( liste des paramètres );
  Déclaration des variables locales
begin
  Instructions
end;

La première ligne est l'entête de la procédure formée du mot clef procedure suivi du nom de la procédure et d'une liste optionnelle de paramètres entre parenthèse.

La partie entre begin et end est le corps de la procédure.

Entête

Sous sa forme la moins compacte, la liste des paramètres s'écrit:


   paramètre1 : type1,...., paramètreN : typeN

On peut obtenir une écriture plus concise en regroupant les paramètres consécutifs de même type, mais dans ce cas chaque groupe de paramètres doit être séparé du suivant par un point virgule, sachant qu'un groupe de paramètres s'écrit:


   paramètre1,...., paramètreN : type

Variables locales

Toute procédure n'utilise pas nécessairement des variables locales, mais si c'est le cas, elles doivent être déclarées entre l'entête et le premier begin.

Ecriture d'un appel de procédure

L'appel d'une procédure est formé du nom de cette procédure suivi d'une liste de paramètres effectifs entre parenthèses.

   NomDeLaProcédure ( liste des paramètres effectifs );

Dans l'exemple que nous avons présenté, les paramètres effectifs étaient des noms de variables. De manière générale, la liste des paramètres effectifs est constituée d'expressions quelconques séparées par des virgules:


   expression1,...., expressionN 

Pour que l'appel de procédure soit compilable (et exécutable !), le type de ces expressions doit être compatible avec celui des paramètres formels:

Reprenons l'exemple de la procédure FormerMail. Voici son entête:


procedure FormerMail (p,n,o : string);

Cette procédure possède donc trois paramètres formels de type chaine de caractères. En supposant que Prenom1, Prenom2 et Nom soient des variables de type chaine de caractères, elle pourrait être appelée de la manière suivante:


         FormerMail (Prenom1+'-'+Prenom2, Nom, 'free');

Mais ne pourra être appelé d'aucune des manières suivantes:


    FormerMail (Prenom1, Nom);

    FormerMail (Prenom1, Nom, 9);
    

En effet, dans le premier appel le nombre de paramètres effectifs n'est pas égal au nombre de paramètres formels et dans le deuxième, le type du troisième paramètre effectif (numérique) n'est pas compatible avec le type du troisième paramètre formel.

Exécution d'un appel de procédure

Principe du retour à la procédure appelante

Un appel de procédure est toujours contenu dans une autre procédure, que nous appelerons la procédure appelante.

Lorsqu'un appel de procédure est exécuté, le processeur interrompt momentanément l'exécution de la procédure appelante pour aller exécuter la procédure appelée. Après avoir exécuté les instructions de cette procédure, il reprend l'exécution de la procédure appelante à partir de l'instruction qui suivait l'appel (figure).
Passage des paramètres et exécution de l'appel
L'exécution d'un appel de procédure consiste à :

Reprenons l'exemple de la procédure FormerMail appelée de la manière suivante:


         FormerMail (Prenom1+'-'+Prenom2, Nom, 'free');

En supposant que les variables Prenom1, Prenom2 et Nom aient respectivement pour valeur 'Jean', 'Sebastien' et 'Bach', cet appel donnerait lieu aux opérations suivantes (pour voir le code de la procédure à droite , cliquez ici) :