警告明确形状的数组重塑

时间:2019-05-29 07:00:09

标签: arrays fortran gfortran

让所有例程都位于模块内部。

  1. 如果我将数组real*8 aa(5,3)传递给例程

    subroutine sub(bb)
    real*8, intent(in) :: bb(2,5)
    ...
    end subroutine
    

    使用语句call sub(aa),它将在没有警告的情况下进行编译,并且aa的前两个将填充bb数组。数组aabb的元素排列非常不同。

  2. 如果改为编写例程,则

    subroutine sub(bb)
    real*8, intent(in) :: bb(:,:)
    ...
    end subroutine
    

    然后bb将具有与aa相同的形状和存储顺序。

问:如果人们忘记例程中存在显式大小的声明,则第一种行为就非常危险。当显形数组更改形状/对齐方式时,我可以使编译器发出警告吗?

1 个答案:

答案 0 :(得分:1)

由于使用存储关联是完全合法的做法,因此我不知道会有编译器选项来警告您-我们对此概念有若干疑问和解答。这可能非常有用。