回 帖 发 新 帖 刷新版面

主题:fortran如何查看里面自带函数或子程序的源代码?

如题,求助,fortran如何查看里面自带函数或子程序的源代码?有时候运行fortran,调用函数或者子程序时出现错误,然后会跳出一些代码,告诉你出错在哪里。不知道大家有没有类似的经历。

我个人认为这些代码是fortran的源代码。所以我就想问有没有什么方法去主动查看这些源代码的,而不是很偶然地出现调用错误才会跳到源代码界面。并且有些错误并不会引领你看到源代码的界面。

谢谢!!

回复列表 (共1个回复)

沙发

Fortran 语法里规定的函数或子程序。语法仅规定了它的作用,接口。对内部实现并没有规定。

每个编译器都可以按照自己的方式去实现这些函数,只要提供语法规定的功能,使用相同的接口既可。

这些内容,算是编译器 Runtime library 的一部分。

而不同编译器,内部实现通常是不同的。

一般来说,有几种可能:

第一,某些函数根本不是真正的函数,而是伪函数。
比如

real a(5)
Do i = 1 , size(a)
 ...
End Do

编译器并不会真正执行 size 函数,并且传递一个 a 的参数,返回 5。

而是直接当成 Do i = 1 , 5

因为编译器在编译时,已经知道了 size(a) 的结果,不必等到执行时再返回。

在这种情况下, size 函数根本就是不存在的。它只是源代码的一种表现形式。

第二,某些函数被 inline 到代码中。

这个解释起来比较麻烦,简单的来说,就是把一个过程展开了。直接接在调用函数的地方。

而不会真正进入一个函数,然后返回。

这种情况下,函数也是不存在的。

第三,某些函数可能仅仅就是一个 CPU 指令,尤其是浮点数相关的函数。

这种情况下,函数依然是不存在的。它就是简单的对 CPU 指令的封装。

第四,某些编译器的 runtime library,并不是Fortran书写的,很可能是C书写的。比如 Visual Fortran 系列。很多函数都带有明显的 msvcr 特征。

这种情况下函数虽然存在,但不以 Fortran 源码为表现。而且,多数编译器的 runtime library 是不开源的。

综上所述,要看到它们的源码是不可能,或者非常困难的。

我来回复

您尚未登录,请登录后再回复。点此登录或注册