Déclaration et appel de procédures

Principes généraux et compléments



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èses.

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 chaines de caractères. 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:

Voici par exemple une procédure qui possède trois paramètres formels (p, n ,o) de type chaine de caractères:

procedure FormerMail (p, n , o : string);
begin
    mail := p+'.'+n+'@'+o+'.fr';
end;

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');

Le premier paramètre effectif est une expression de type chaine de caractères, le deuxième une variable de type chaine de caractères et le troisième, un littéral de type chaine de caractères. Ces trois paramètres effectifs sont donc compatibles avec les paramètres formels.

Par contre, elle ne pourra être appelée 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

Les paramètres formels d'un sous-programme peuvent être considérés comme des variables locales.

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):