Index du tour guidé

Bienvenue dans la formation COBOL

Apprenez les bases du COBOL et développez vos compétences en programmation legacy avec une approche moderne.

Info : Ce module vous permet d’accéder rapidement aux contenus essentiels de la formation COBOL.
Retour au plan général
Navigation rapide
Utilisez ces boutons si vous voulez accéder directement à une page, sans parcourir les cartes.
1 2 3 4 5 6 7 8 9 10

Leçon 8 : appeler un sous-programme et passer des paramètres

Objectif : comprendre comment une application Cobol se découpe en plusieurs programmes, puis apprendre à échanger des données entre un programme appelant et un programme appelé via  CALL ,  USING  et  LINKAGE  SECTION .

Débutant Modularité Paramètres
🧩
Idée clé
Une application Cobol réelle n’est pas un seul programme “géant” : elle est souvent composée de modules spécialisés. L’appel de sous-programmes permet de réutiliser des traitements et de séparer les responsabilités. Les paramètres servent d’interface : ce que l’appelant donne, l’appelé le reçoit, le lit, et peut le modifier pour renvoyer un résultat.
🧠

Conceptualiser

CALL

Dans une architecture classique :

📞
Programme appelant
Il prépare les données, puis déclenche un traitement externe avec  CALL  USING .
🧱
Programme appelé
Il reçoit les paramètres dans sa  LINKAGE  SECTION , puis annonce ses paramètres via  PROCEDURE  DIVISION  USING .
🔁
Passage de paramètres
Très souvent, le passage se fait par référence : si l’appelé modifie le paramètre, l’appelant voit la modification après le retour.
⚠️
Ce qui doit absolument correspondre
Le nombre de paramètres et surtout la taille (PIC) doivent être compatibles entre appelant et appelé, sinon vous obtenez un résultat incohérent.
🧭 Lecture “architecte”
• L’appelant : prépare et orchestre.
• L’appelé : traite et renvoie via paramètres ou code retour.
• Les paramètres : interface contractuelle entre modules.
🧪

Opérer

Deux programmes (un fichier)

Exemple pédagogique : le premier programme appelle le second et lui passe un paramètre texte. L’appelé modifie ce paramètre, ce qui montre le passage “par référence”.

🧾Fichier : demo-call.cbl
Cobol (format libre)

 >>SOURCE FORMAT FREE
 IDENTIFICATION DIVISION.
 PROGRAM-ID. DEMO-CALLER.

 DATA DIVISION.
 WORKING-STORAGE SECTION.
 01 WS-NOM PIC X(20) VALUE SPACES.

 PROCEDURE DIVISION.
    MOVE "DURAND" TO WS-NOM
    DISPLAY "Avant appel : " WS-NOM

    CALL "DEMO-CALLEE" USING WS-NOM

    DISPLAY "Apres appel : " WS-NOM
    STOP RUN.

 END PROGRAM DEMO-CALLER.


 IDENTIFICATION DIVISION.
 PROGRAM-ID. DEMO-CALLEE.

 DATA DIVISION.
 LINKAGE SECTION.
 01 LK-NOM PIC X(20).

 PROCEDURE DIVISION USING LK-NOM.
    DISPLAY "Dans appele : " LK-NOM
    MOVE "MODIFIE-PAR-SOUS-PROG" TO LK-NOM
    GOBACK.

 END PROGRAM DEMO-CALLEE.
▶️ Compilation (exemple)
cobc -x -free demo-call.cbl
L’exécutable contient deux programmes ; l’appel se fait via le nom déclaré en  PROGRAM-ID .
✅ Ce que vous observez
  • Valeur avant l’appel
  • Valeur dans l’appelé
  • Valeur modifiée au retour
🧯

Déboguer

Erreurs typiques

Les appels inter-programmes échouent souvent pour des raisons “contractuelles” : paramètres attendus, tailles, ordre.

  • Appeler sans passer les paramètres attendus : résultat incohérent (ou crash selon environnement).
  • Taille différente entre la zone passée et la zone décrite en linkage : le sous-programme lit/écrit au mauvais endroit.
🔎 Astuce

Pour diagnostiquer, affichez dans l’appelant et dans l’appelé les paramètres entre crochets [...] afin de voir les espaces et vérifier que les contenus correspondent.

🧭

Expliquer et explorer

Exercices

Par défaut, beaucoup d’environnements passent “par référence” : modifier dans l’appelé modifie dans l’appelant. Cela permet de renvoyer des résultats via des paramètres, sans avoir besoin d’un “retour de fonction”.

📌 Conseil de conception
Pour éviter les effets de bord, séparez vos paramètres en deux catégories : entrées (lues seulement) et sorties (écrites par l’appelé). Même si Cobol passe par référence, votre convention de code peut rester claire.

🧩 Exercices (à faire tout de suite)

  1. Passez deux paramètres : nom + ville.
  2. Dans l’appelé, renvoyez un message formaté dans un troisième paramètre.
💡 Cette version montre une convention claire : nom et ville en entrée, message en sortie (rempli par l’appelé).
🧾 Fichier : exo-call-3params.cbl

 >>SOURCE FORMAT FREE
 IDENTIFICATION DIVISION.
 PROGRAM-ID. EXO-CALLER.

 DATA DIVISION.
 WORKING-STORAGE SECTION.
 01 WS-NOM    PIC X(20) VALUE SPACES.
 01 WS-VILLE  PIC X(20) VALUE SPACES.
 01 WS-MSG   PIC X(80) VALUE SPACES.

 PROCEDURE DIVISION.
    MOVE "DURAND" TO WS-NOM
    MOVE "LILLE"  TO WS-VILLE

    DISPLAY "Avant appel MSG : [" WS-MSG "]"

    CALL "EXO-CALLEE" USING WS-NOM WS-VILLE WS-MSG

    DISPLAY "Apres appel MSG : [" WS-MSG "]"
    STOP RUN.

 END PROGRAM EXO-CALLER.


 IDENTIFICATION DIVISION.
 PROGRAM-ID. EXO-CALLEE.

 DATA DIVISION.
 LINKAGE SECTION.
 01 LK-NOM   PIC X(20).
 01 LK-VILLE PIC X(20).
 01 LK-MSG   PIC X(80).

 PROCEDURE DIVISION USING LK-NOM LK-VILLE LK-MSG.
    MOVE SPACES TO LK-MSG
    STRING
        "Bonjour " DELIMITED BY SIZE
        FUNCTION TRIM(LK-NOM) DELIMITED BY SIZE
        ", ville = " DELIMITED BY SIZE
        FUNCTION TRIM(LK-VILLE) DELIMITED BY SIZE
        "." DELIMITED BY SIZE
        INTO LK-MSG
    END-STRING
    GOBACK.

 END PROGRAM EXO-CALLEE.
⚠️ Vérifiez que la taille des champs est identique entre l’appelant et la  LINKAGE  SECTION . Ici : 20, 20, 80.

↑ Haut