Ich versuche den folgenden Code, der einfach zwei Array-Konstruktoren hinzufügt, um ein eindimensionales Array zu erhalten. Abhängig davon, ob one
in diesen Ausdrücken verwendet wird (außerhalb der impliziten DO-Schleife), erhalte ich falsche Ergebnisse mit gfortran-5.3 für (1), (3) und (6). Auf der anderen Seite geben ifort-14.0 und Sun fortran 8.7 in allen Fällen korrekte Ergebnisse. Seltsamerweise, wenn ich einen ähnlichen, aber komplizierteren Ausdruck versuche, beginnt sich sogar Sun fortran seltsam zu verhalten (d. H. Es wird während der Kompilierung eingefroren ...). Ich frage mich also, ob ich eine falsche oder gefährliche Syntax in diesen Ausdrücken verwende. Irgendeine Idee...? (Übrigens, wenn ich nur einen Konstruktor zwischen den beiden verlassen, arbeiten sie immer wie erwartet.)Seltsame Ergebnisse durch Hinzufügung von zwei Array-Konstruktoren
program main
implicit none
integer :: k
integer, dimension(2), parameter :: zero = [0,0], one = [1,1]
integer, parameter :: N = 1
print *, [ one, (zero, k=1,N) ] + [ (zero, k=1,N), one ] !! (1)
print *, [ [1, 1], (zero, k=1,N) ] + [ (zero, k=1,N), [1, 1] ] !! (2)
print *, [ one, ([0, 0],k=1,N) ] + [ ([0, 0],k=1,N), one ] !! (3)
print *, [ [1, 1], ([0, 0],k=1,N) ] + [ ([0, 0],k=1,N), [1, 1] ] !! (4)
print *, [ 1, 1, (0, 0, k=1,N) ] + [ (0, 0, k=1,N), 1, 1 ] !! (5)
print *, [ one, (0, 0, k=1,N) ] + [ (0, 0, k=1,N), one ] !! (6)
print *, [ (one, k=1,1), (zero, k=1,N) ] + [ (zero, k=1,N), (one, k=1,1) ] !! (7)
endprogram
Ergebnisse mit ifort14.0 und Sun Fortran 8.7:
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
Ergebnisse mit gfortran-5.3:
1 1 0 1
1 1 1 1
1 1 0 1
1 1 1 1
1 1 1 1
1 1 0 1
1 1 1 1
Wer mir gut aussehen. – francescalus
@francescalus OK, vielen Dank! – roygvib