我有一个Fortran 90项目,它广泛使用loc函数来获取数组的地址(与Matlab互操作的API的一部分)。
这段代码在Intel和gfortran上编译和工作在Mac和Linux上,并且已经有一段时间了(跨越几个不同的编译器版本)。
我现在正尝试在Composer XE 2015上使用英特尔Fortran在Windows上构build。当我使用debugging器进行debugging时,发现LOC函数正确地返回了地址,但是调用的子程序中的调用似乎什么也不做 – 它只是返回数据的值而不是位置。
有没有人有一个想法,为什么LOC不工作? 我已经试过了loc()和%LOC(),并得到相同的行为。 有关示例,请参阅此function 。 第69行的loc工作,第116行的loc不(只返回数据的值)。 REPIDX_0(X,1)是一个预处理器macros,在这种情况下只返回X.
任何意见或指针将不胜感激 – 我完全卡住了。
这是一个最小的例子:
program testloc implicit none real, pointer :: x integer(8) :: add1, add2 allocate(x) x = 2 add1 = loc(x) call get_add(x,add2) write(*,*) add1 write(*,*) add2 deallocate(x) contains subroutine get_add(x,add) real, pointer, intent(in) :: x integer(8), intent(out) :: add add = loc(x) end subroutine end program
在Mac / Linux与ifort 12.1.3我得到预期的输出:
MatlabAPI_lite robince$ ./a.out 140661969926608 140661969926608
在Windows与ifort 15.0.1我得到有问题的输出:
c:\code\MatlabAPI_lite>testloc 4636400 2
这是一个编译器错误 – 在15.0.3中修复。