3 ms·
> Change the loop counter? That's supposed to be impossible in Fortran, isn't it? It is impossible inside the loop, even in F77. But if a global variable is u
by sampo 10y ago
> Change the loop counter? That's supposed to be impossible in Fortran, isn't it?
It is impossible inside the loop, even in F77.
But if a global variable is used as a loop counter, and the variable is altered in a subroutine, then the code altering the variable is not inside the loop. At least not in the eyes of the Fortran compiler.
$ cat test.f08
program test
integer i
do i = 1,3
call sub
print *,i
end do
contains
subroutine sub
i = 3
end subroutine sub
end program test
$ gfortran --std=f2008 test.f08
$ ./a.out
3
- greglindahl 10y ago... just because it does that in gfortran doesn't mean it's standard-conforming code.
- ams6110 10y agoWhat is the "standard" fortran compiler for scientific computing? Do a lot of people use gfortran? Or something commercial?
- greglindahl 10y agoThere is no "standard" compiler. There is a Fortran standard, and there are standard-conforming compilers and standard-conforming programs. There are popular compilers, like gfortran and the Intel compiler. My point had nothing to do with popularity. My point is that non-standard-conforming programs can have anything happen when they execute, including starting World War III (see https://www.google.com/search?q=fortran+"start+world+war" https://www.google.com/search?q=fortran+"start+world+war"), and showing output from one compiler doesn't prove anything.
- sampo 10y ago> What is the "standard" fortran compiler for scientific computing? Not so long ago, supercomputers typically had Portland Group, Cray and Pathscale compilers installed. Nowadays it's pretty much Intel and gfortran.