CALL BY REFERENCE vs CONTENT
Problem Description
Understand difference between BY REFERENCE and BY CONTENT.
Expected Output
Parameter passing modes
Hints
BY REFERENCE allows modification, BY CONTENT passes copy.
Solution
IDENTIFICATION DIVISION.
PROGRAM-ID. CALLMODES.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-VALUE1 PIC 9(5) VALUE 100.
01 WS-VALUE2 PIC 9(5) VALUE 200.
01 WS-VALUE3 PIC 9(5) VALUE 300.
PROCEDURE DIVISION.
DISPLAY "BEFORE CALL:".
DISPLAY "VALUE1: " WS-VALUE1.
DISPLAY "VALUE2: " WS-VALUE2.
DISPLAY "VALUE3: " WS-VALUE3.
* BY REFERENCE - subprogram can modify original
* CALL "SUB" USING BY REFERENCE WS-VALUE1.
* After call, WS-VALUE1 may be changed
* BY CONTENT - passes copy, original unchanged
* CALL "SUB" USING BY CONTENT WS-VALUE2.
* WS-VALUE2 stays same even if sub modifies it
* BY VALUE - passes actual value (numeric only)
* CALL "SUB" USING BY VALUE WS-VALUE3.
* Simulating the calls:
DISPLAY " ".
DISPLAY "BY REFERENCE: Subprogram CAN modify original".
DISPLAY "BY CONTENT: Subprogram gets COPY, original safe".
DISPLAY "BY VALUE: Passes actual VALUE, not address".
DISPLAY " ".
DISPLAY "RECOMMENDED:".
DISPLAY "- Input params: BY CONTENT (protected)".
DISPLAY "- Output params: BY REFERENCE (modifiable)".
STOP RUN.
Explanation:
BY REFERENCE allows changes to original. BY CONTENT protects original. BY VALUE for literals.