假設我有一個接受兩個數組作爲輸入的子例程。一個給予意圖(in),另一個給予意圖(out)。後者是以任意方式從前者衍生而來的。但是,如果我通過兩個虛擬參數的相同實際參數會怎樣?一般來說,結果不會是子程序的意圖。查看下面的代碼片段。Fortran:將相同的數組作爲兩個僞參數傳遞給子例程
問題是,編譯器似乎並不在乎,即使我已經給出了意圖標誌。我正在使用英特爾Visual Fortran Composer 12和所有診斷程序。有沒有更好的方法來編寫子程序,或者我缺少一些編譯器選項,以使代碼更安全?
module foo
contains
subroutine sub_a()
implicit none
real::array(10,10)
call sub_b(array,array)
end subroutine
subroutine sub_b(array1,array2)
implicit none
real,intent(in)::array1(10,10)
real,intent(out)::array2(10,10)
!array2 is derived from array1 somehow
end subroutine
end module foo
謝謝,清除它。不幸的是,英特爾Visual Fortran對此沒有提出警告。我想唯一的解決方案是使用適當的子程序調用的紀律。 – bdforbes
您如何比較兩個輸入數組的位置?這是一件安全的事情嗎?另外,顯然F2003沒有實現loc函數,是否有等價的? – bdforbes