Microsoft KB Archive/35871

From BetaArchive Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Knowledge Base


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 "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 query words: 1.00 4.00 4.10 5.00 5.10

Keywords: kblangfortran KB35871