> Thanks for the replys to my previous mail. One advice was to introduce the
> PRIVATE statement inside the B module. This seems to be a quite sensible
> thing to do. But the following example, compiled with Visual Fortran 5.0,
> seems to show that this doesn't work.
>
> output from the program:
>
> a= 1234
> b= 6912
>
> -------------------------------------------------------------------------------
>
> The behaviour I would expect was that the variable a would not be recognized
> and that a compilation error would result.
Digital Fortran 90 for OpenVMS Alpha gives the `expected' behaviour:
$ TYPE TEST.F90
module amod
implicit none
private
integer, public :: a
public :: inita
contains
subroutine inita
a = 1234
end subroutine inita
end module amod
module bmod
use amod
implicit none
private
integer, public :: b
public :: initb
contains
subroutine initb
call inita
b = a+5678
end subroutine initb
end module bmod
program testmod
use bmod
implicit none
call initb
write (*,*) 'a=', a
write (*,*) 'b=', b
end program testmod
$ ON ERROR THEN GOTO OK
$ F90 TEST
write (*,*) 'a=', a
..................^
%F90-E-ERROR, This name does not have a type, and must have an explicit type. [A]
at line number 30 in file DISK$SCRATCH:[HELBIG]TEST.F90;1
$ OK:
$ SET NOVERIFY
So does Digital UNIX:
fire.palmod.uni-bremen.de> cat > dec
f90 test.f90
./a.out
fire.palmod.uni-bremen.de> source dec
f90: Error: test.f90, line 30: This name does not have a type, and must
have an]
write (*,*) 'a=', a
------------------^
./a.out: Command not found.
fire.palmod.uni-bremen.de>
So does IBM's xlf90:
geo> cat > aix
xlf90 test.f
./a.out
geo> source aix
** amod === End of Compilation 1 ===
** bmod === End of Compilation 2 ===
"test.f", 1516-036 (S) Variable a has undefined type.
** testmod === End of Compilation 3 ===
1501-511 Compilation failed for file test.f.
./a.out: Command not found.
geo>
So does the SUN f90 compiler:
ceres_67_% source sun
write (*,*) 'a=', a
^
cf90-113 f90comp: ERROR TESTMOD, File = test.f90, Line = 30, Column = 19
IMPLICIT NONE is specified in the local scope, therefore an explicit
type must
be specified for data object "A".
f90: SunSoft F90 Version 1.0.1.0 (16039279) Tue Dec 9, 1997 08:41:43
f90: COMPILE TIME 0.190000 SECONDS
f90: MAXIMUM FIELD LENGTH 2929214 DECIMAL WORDS
f90: 34 SOURCE LINES
f90: 1 ERRORS, 0 WARNINGS, 0 OTHER MESSAGES, 0 ANSI
f90: CODE: 41 WORDS, DATA: 4 WORDS
./a.out: Command not found.
ceres_68_%
> My understanding from the F90 documentation I have read so far is that
> the PRIVATE statement in the bmod module concerns all enteties
> accessible in the bmod module, and this includes the variable a and the
> subroutine inita from the amod module. Is my understanding of this
> wrong?
I also asked about this yesterday, if this fix (using PRIVATE) is
guaranteed to work in a platform-independent way. I'm sure we'll see
some replies from the experts today.
--
Phillip Helbig Email .......... [log in to unmask]
Nuffield Radio Astronomy Laboratories Tel. ..... +44 1477 571 321 (ext. 297)
Jodrell Bank Fax ................. +44 1477 571 618
Macclesfield Telex ................. 36149 JODREL G
UK-Cheshire SK11 9DL Web .... http://www.jb.man.ac.uk/~pjh/
My opinions are not necessarily those of NRAL or the University of Manchester.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|