ich jetzt versuche, meine alten Fortran-Code zu aktualisieren, die die Linien wie (*)Ordnen Sie mehrere Variablen auf einmal mit SOURCE =
allocate(a(2), b(2))
a(:) = 0.0
b(:) = 0.0
Zunächst änderte ich sie
allocate(a(2), source=0.0)
allocate(b(2), source=0.0)
beinhaltet aber Das ist eindeutig nicht sehr einfach. Also habe ich versucht, sie zu kombinieren, so dass
allocate(a(2), b(2), source=0.0) !! (1)
habe ich nicht erwarten, dass es funktioniert, aber es funktionierte tatsächlich für gfortran> = 4,8 und Sun Fortran 8.7 (die zwar nicht für ifort-14). Also ging ich durch den Abschnitt ALLOCATE der F2003 und F2008 Dokumente, und es scheint, dass die Einschränkung in F2008 entfernt wurde, dass "Wenn SOURCE = erscheint, Zuweisung-Liste soll nur eine allocate-Objekt enthalten". Bedeutet dies, dass die obige Zeile 1 in F2008 kein Problem darstellt und dass das unterschiedliche Verhalten einfach auf den unterschiedlichen Grad der F2008-Unterstützung zurückzuführen ist?
(*) In tatsächlichen Codes habe ich versucht, mehrere Array-Komponenten eines abgeleiteten Typs, allocate(conf% crd(3,N), conf% vel(3,N), conf% frc(3,N), blah, blah,...)
zuzuweisen, während sie jedem von ihnen Null zuweisen. Ich habe mich gefragt, ob es möglich ist, diese Zeilen etwas zu vereinfachen.
Sehr einfach: ja. Angenommen, "a" und "b" sind typkompatibel mit "0.0". – francescalus
@francescalus OK danke :) Ich fühle, dass dies sehr praktisch ist, wenn viele Compiler unterstützen ... – roygvib
Beachten Sie jedoch: Einige Versionen von ifort implementieren die Syntaxregeln von F2008, aber nicht richtig Sourcing. [Das heißt, der Compiler gibt im Hintergrund nicht das korrekte Ergebnis der zugeteilten Zuordnung aus.] – francescalus