1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
module class_36_module
type :: SomeType
integer :: x = 2
contains
procedure, pass :: subroutine_pass
procedure, nopass :: subroutine_nopass
procedure, pass :: function_pass
procedure, nopass :: function_nopass
end type SomeType
contains
subroutine subroutine_pass(self, var)
class(SomeType), intent(in) :: self
real(8), intent(out) :: var
print *, "var inside subroutine_pass: ", var
if (var /= 16.33) error stop
var = 32.33
call self%subroutine_nopass(var)
end subroutine subroutine_pass
subroutine subroutine_nopass(var)
real(8), intent(out) :: var
print *, "var inside subroutine_nopass: ", var
if (var /= 32.33) error stop
var = 64.33
end subroutine subroutine_nopass
integer function function_pass (self)
class(SomeType) :: self
function_pass = self%x
end function function_pass
integer function function_nopass (var)
integer :: var
function_nopass = var
end function function_nopass
end module class_36_module
program class_36
use class_36_module
implicit none
type(SomeType) :: my_var
real(8) :: r
r = 16.33
call my_var%subroutine_pass(r)
print *, "r after subroutine call: ", r
if (r /= 64.33) error stop
print *, "return from function_pass: ", function_pass(my_var)
print *, "return from function_nopass: ", function_nopass(42)
end program
|