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
|
! Copyright 2019 Free Software Foundation, Inc.
!
! This program is free software; you can redistribute it and/or modify
! it under the terms of the GNU General Public License as published by
! the Free Software Foundation; either version 3 of the License, or
! (at your option) any later version.
!
! This program is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! GNU General Public License for more details.
!
! You should have received a copy of the GNU General Public License
! along with this program. If not, see <http://www.gnu.org/licenses/> .
module container
implicit none
integer :: a
contains
subroutine print_from_module()
print *, "hello."
end subroutine
end module
program contains_keyword
use container
implicit none
integer :: program_i, program_j
program_j = 12 ! pre_init
program_i = 7
program_j = increment(program_j) ! pre_increment
program_i = increment_program_global() ! pre_increment_program_global
call subroutine_to_call()
call step() ! pre_step
call hidden_variable()
call print_from_module()
print '(I2)', program_j, program_i ! post_init
contains
subroutine subroutine_to_call()
print *, "called"
end subroutine
integer function increment(i)
integer :: i
increment = i + 1
print *, i ! post_increment
end function
integer function increment_program_global()
increment_program_global = program_i + 1
! Need to put in a dummy print here to break on as on some systems the
! variables leave scope at "end function", but on others they do not.
print *, program_i ! post_increment_global
end function
subroutine step()
print '(A)', "step" ! post_step
end subroutine
subroutine hidden_variable()
integer :: program_i
program_i = 30
print *, program_i ! post_hidden
end subroutine
end program contains_keyword
|