Bob*_*Bob 4 legacy fortran gfortran intrinsics
我试图通过使用gfortran从源代码构建它来获得遗留的FORTRAN代码.我终于能够成功构建它,但现在我运行时遇到了越界错误.我使用gdb并将错误跟踪到使用loc()内在函数的函数.当我尝试打印值时loc(ae),使用ae作为我的整数值,我得到错误"No symbol"loc"in current context".我尝试使用ifort 11.x进行编译并使用DDT进行调试并得到相同的错误.对我来说,这意味着编译器对内在函数一无所知.
一点点阅读显示,内在内在不是F77标准的一部分,所以也许这是问题的一部分.我在下面发布了内在的定义,但我不知道如何在我的代码中实现它,因此可以使用loc().
有什么建议或我误解了我的问题?因为gfortran和ifort由于越界错误而在同一个地方崩溃,但是使用loc()的函数在两个编译器之间返回相同的大数.如果两个编译器都为loc返回相同的值,则loc()将无法工作似乎有点奇怪.
用法:
iaddr = loc(obj)
哪里:
obj是一个变量,数组,函数或子程序,其地址是通缉的.iaddr是一个地址为"obj"的整数.地址格式与LARn指令存储的格式相同.
描述:
LOC用于获取某些东西的地址.返回的值在Fortran中并不真正有用,但可能需要GMAP子例程或非常特殊的调试.
哦,不,它编译这意味着,实际上loc 是由编译器知道; 事实上gdb不知道它只是意味着它只是调试器不知道(它可能也不知道matmult内在的).
loc是一种广泛使用的非标准扩展.我讨厌那些.如果你想要一些应该在任何地方工作的标准,那么你可以使用c_loc,它是Fortran2003中C < - > Fortran互操作性标准的一部分.它返回一个可以传递给C例程的指针.
如何使用loc调用的值?