All pastes #614628 Raw Edit

Fortran83.5

public text v1 · immutable
·published 2007-07-11 17:58 UTC
rendered paste body
na56:~/experiment/fmod/gfortran>cat testmod.nm
00000004 C x_

na56:~/experiment/fmod/gfortran>cat usemod.nm
00000000 T MAIN__
         U __stack_chk_fail
         U _gfortran_set_std
         U _gfortran_st_write
         U _gfortran_st_write_done
         U _gfortran_transfer_character
         U _gfortran_transfer_integer
         U compute_
00000004 C x_

na56:~/experiment/fmod/gfortran>cat compute.nm
         U __stack_chk_fail
         U _gfortran_st_write
         U _gfortran_st_write_done
         U _gfortran_transfer_character
00000000 T compute_
00000004 C x_

[testmod.f90]
MODULE TESTMOD
	IMPLICIT NONE
       INTEGER :: X
       COMMON /X/ X
       INTERFACE
              SUBROUTINE COMPUTE(X)
              INTEGER X
              END SUBROUTINE
       END INTERFACE
END MODULE TESTMOD

[usemod.f90]
PROGRAM USEMOD
USE TESTMOD
IMPLICIT NONE
!INTEGER X			! This will shadow the global X
!CALL COMPUTE(1D0)		! This does not work (compile error)
X=0
WRITE(*,*) 'X is now:',X
WRITE(*,*) 'Calling "compute"'
CALL COMPUTE(1)
WRITE(*,*) 'X is now:',X
END PROGRAM USEMOD

[compute.f90]
SUBROUTINE COMPUTE(Y)
       USE TESTMOD
       IMPLICIT NONE
       INTEGER Y
	!INTEGER X        ! this will shadow the X from usemod
	!COMMON /X/ X
       WRITE(*,*) 'Inside the compute routine (increasing X by 1)'
       X=X+1
END SUBROUTINE COMPUTE

[Makefile]
.SUFFIXES: .f90 .o .mod
.PHONY: clean objdump
FC=gfortran
FCOPTS=-c
ALL=usemod
MODFILES=testmod.mod
OBJFILES=testmod.o compute.o usemod.o
usemod: $(MODFILES) $(OBJFILES)
	$(FC) -o $@ $(OBJFILES) 
.f90.o:
	$(FC) $(FCOPTS) $<
# .mod files are actually generated as a "bi-product"
.f90.mod:
	$(FC) $(FCOPTS) $<
# Disable default build rule for .mod files.
%.o : %.mod
clean:
	rm -f $(OBJFILES) $(MODFILES) $(ALL)