让所有例程都位于模块内部。
如果我将数组real*8 aa(5,3)
传递给例程
subroutine sub(bb)
real*8, intent(in) :: bb(2,5)
...
end subroutine
使用语句call sub(aa)
,它将在没有警告的情况下进行编译,并且aa
的前两个列将填充bb
数组。数组aa
和bb
的元素排列非常不同。
如果改为编写例程,则
subroutine sub(bb)
real*8, intent(in) :: bb(:,:)
...
end subroutine
然后bb
将具有与aa
相同的形状和存储顺序。
问:如果人们忘记例程中存在显式大小的声明,则第一种行为就非常危险。当显形数组更改形状/对齐方式时,我可以使编译器发出警告吗?
答案 0 :(得分:1)
由于使用存储关联是完全合法的做法,因此我不知道会有编译器选项来警告您-我们对此概念有若干疑问和解答。这可能非常有用。