fortran - 对于不属于标准的 FORTRAN 内在函数,我该怎么办?

标签 fortran legacy gfortran intrinsics

我试图通过使用 gfortran 从源代码构建它来使遗留的 FORTRAN 代码工作。我终于能够成功构建它,但是现在我在运行时遇到了越界错误。我使用 gdb 并将错误追溯到使用 loc() 内在函数的函数。当我尝试打印 loc(ae) 的值时,ae 是我传递的整数值,我收到错误“当前上下文中没有符号“loc”。”我尝试使用 ifort 11.x 进行编译并使用 DDT 进行调试并得到相同的错误。对我来说,这意味着编译器对内在的一无所知。

一点点阅读显示 loc 内在函数不是 F77 标准的一部分,所以这可能是问题的一部分。我在下面发布了内在函数的定义,但我不知道如何将其实现到我的代码中,以便可以使用 loc()。

有什么建议还是我误解了我的问题?因为 gfortran 和 ifort 由于越界错误而在同一个地方崩溃,但是使用 loc() 的函数在两个编译器之间返回相同的大数。如果两个编译器都返回相同的 loc 值,那么 loc() 将无法工作似乎有点奇怪。

Usage:

iaddr = loc(obj)

Where:

obj is a variable, array, function or subroutine whose address is wanted. iaddr is an integer with the address of "obj". The address is in the same format as stored by an LARn instruction.

Description:

LOC is used to obtain the address of something. The value returned is not really useful within Fortran, but may be needed for GMAP subroutines, or very special debugging.

最佳答案

好吧,不,它编译的事实意味着 loc被编译器知道; gdb 不知道它的事实只是意味着调试器不知道它(它可能也不知道 matmult 内在函数)。
loc是一个广泛使用的非标准扩展。我讨厌那些。如果你想要一些应该在任何地方都适用的标准,c_loc是 Fortran2003 中 C<->Fortran 互操作性标准的一部分,您可以使用它。它返回一个可以传递给 C 例程的指针。

如何使用 loc 调用的值?

关于fortran - 对于不属于标准的 FORTRAN 内在函数,我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5876246/

相关文章:

c++ - 混合使用 C、C++ 和 Fortran 代码

architecture - 旧版兼容性的最佳实践

fortran - 如何使用 gfortran 处理应用于整数值的逻辑语句?

c++ - 当 C 代码调用 Fortran 子程序时,子程序顶部发生段错误

c++ - 在混合源代码中生成调用树或抽象语法树?

fortran - 错误 : Expected PARAMETER symbol in complex constant at (1)

ruby-on-rails - gsub { $1.upcase} ?相当于.capitalize?

java - 使用类加载器隔离静态单例类

fortran - "too many records in I/O statement"错误的原因不明

Fortran 查询返回内部文件