PRB: Passing Constants to Subroutines in FORTRAN

ID: Q35871

4.00 4.10 5.00 5.10 1.00 1.00a | 1.00 4.00

MS-DOS                         | WINDOWS NT
kbprg kbcode kbprb

The information in this article applies to:

SYMPTOMS

The code below will generate the following output:

        1.000000
        2.000000

or print 1.000000 and cause a general protection fault.

CAUSE

This behavior is not a problem with Microsoft FORTRAN. The FORTRAN 77 ANSI standard, section 15.9.2, specifies that when passing a constant as an actual argument to a subroutine, the associated dummy argument (in this case x) cannot be modified.

Microsoft FORTRAN does not generate error messages while compiling. The above code does not follow the standard; therefore, it will generate unpredictable results because FORTRAN passes by reference.

RESOLUTION

If the associated dummy argument is going to be modified, pass a variable. For example, use "call sub1(y)" with y=1.

MORE INFORMATION

The following code demonstrates this information:

        write (*,*) 1.0
        call sub1(1.0)
        write (*,*) 1.0
        end

        subroutine sub1(x)
        real x
        x = 2.0
        return
        end

Additional reference words: 1.00 4.00 4.10 5.00 5.10 KBCategory: kbprg kbprb KBSubcategory: FORTLngIss
Keywords          : kbFortranPS kbLangFortran 
Version           : 4.00 4.10 5.00 5.10 1.00 1.00a |
Platform          : MS-DOS NT WINDOWS

Last Reviewed: May 2, 1998