Ich habe folgendes Programmkeeping Feldgrenzen in Fortran während Subroutinen-Aufruf
module test
contains
subroutine foo()
integer, allocatable :: a(:)
allocate(a(-5:5))
call bar(a)
print *, a
end subroutine
subroutine bar(a)
integer, intent(out) :: a(:)
a = 0
a(-4) = 3 ! here
a(2) = 3
end subroutine
end module
program x
use test
call foo()
end program
In der Zeile, die mit „hier“ ich etwas falsch mache. Tatsache ist, dass, wenn ich das Array a
(in dem Anrufer von -5 bis +5 zugeordnet) erhält der Angerufene konventionelle Nummerierung (1 bis n) verwendet, was bedeutet, dass die Zuweisung -4 Ich mache eine außerhalb der Grenze Zuweisung. Wie kann ich dem Compiler mitteilen, dass innerhalb der bar
Routine die Nummerierung des Arrays a
mit der im Aufrufer übereinstimmen muss?
Was ist, wenn ich den Startindex zur Kompilierzeit nicht kenne? –
@ Stefano: siehe M. S. B. Antwort. Sie benötigen die untere Grenze, um das zweite Argument Ihres Bar-Unterprogramms zu sein. – Wildcat
Also ist die Anweisung 'integer, intent (out) :: a (lbound (a) :)' ungültig? (habe es nicht versucht, vielleicht sollte ich). Ich mag es nicht, Details über mein Array als Argument zu übergeben. –