警告明确形状的数组重塑

Jon*_*röm 5 arrays fortran gfortran

让所有例程都在模块内部。

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

    subroutine sub(bb)
    real*8, intent(in) :: bb(2,5)
    ...
    end subroutine
    
    Run Code Online (Sandbox Code Playgroud)

    用下面的语句call sub(aa),这将编译没有警告,前2 列的aa将填补bb阵列。数组aa和元素的bb排列方式非常不同。

  2. 如果相反,例程被编写

    subroutine sub(bb)
    real*8, intent(in) :: bb(:,:)
    ...
    end subroutine
    
    Run Code Online (Sandbox Code Playgroud)

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

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