Fortran: Passing integers to type dimension

  • #1
Why does does the following code not compile?

Code:
      PROGRAM TYPES
      INTEGER A(3)      
      A(1)=1
      A(2)=2
      A(3)=3      
      CALL SUBR(A)
      print *,'Done'
      RETURN
      END            
    
C --- Here is a subroutine -----
      SUBROUTINE SUBR(A)
      DIMENSION A(3) 
      RETURN
      END
For some reason it compiles when I change the word "INTERGERS" to "REAL," but it doesn't compile as is.
 

Answers and Replies

  • #2
AlephZero
Science Advisor
Homework Helper
6,994
291
In the subroutine A is a REAL variable, since you didn't specify the type.

By default, variable names starting with letters I-N are INTEGER, A-H and O-Z are REAL.

Variables in each subprogram are independent of each other. The variable name A in the subroutine is independent of A in the main program.
 
  • #3
rcgldr
Homework Helper
8,710
538
Also in your comment, you spelled it "INTERGER" a mistake that a co-worker of mine in the 1970's constantly made, then wondered why the variables afterwards became "REAL".

In Fortran, parameters are passed by address, not by value, so the subroutine needs to know that "A" is an integer as well, but doesn't need to know the size, so you could just delcare "INTEGER A(1)" in the subroutine. Most compilers don't check for valid indexes anyway. Regarding passing parameters by address, this was always interesting depending on the compiler:

CALL SUBR(1.0)
A = 1.0
...

SUBROUTINE SUBR(X)
X = 2.0
RETURN
END
 
Last edited:

Related Threads on Fortran: Passing integers to type dimension

Replies
5
Views
4K
Replies
5
Views
4K
Replies
5
Views
2K
Replies
6
Views
3K
Replies
5
Views
11K
Replies
4
Views
10K
Replies
2
Views
1K
Replies
10
Views
4K
Replies
5
Views
4K
Top