Master Mainframe Technologies - COBOL, JCL, DB2, VSAM, CICS & More
ABEND Codes SQLCODEs File Status Interview Prep Contact
← Back to Subprograms
Subprograms | Advanced | COBOL

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.