Microsoft KB Archive/35871

= PRB: Passing Constants to Subroutines in FORTRAN =

Article ID: 35871

Article Last Modified on 12/1/2003

-

APPLIES TO


 * Microsoft FORTRAN Compiler 4.0
 * Microsoft FORTRAN Compiler 4.1
 * Microsoft FORTRAN PowerStation 1.0 Standard Edition
 * Microsoft Fortran PowerStation 1.0a for MS-DOS
 * Microsoft FORTRAN PowerStation 32
 * Microsoft FORTRAN PowerStation 32

-



This article was previously published under Q35871



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 &quot;call sub1(y)&quot; 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 query words: 1.00 4.00 4.10 5.00 5.10

Keywords: kblangfortran KB35871

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.