首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Fortran95中连接主程序和子程序?

如何在Fortran95中连接主程序和子程序?
EN

Stack Overflow用户
提问于 2014-12-14 12:36:57
回答 1查看 1.1K关注 0票数 1

如何将外部子程序链接到Fortran中的主程序?不过,我从这本书中得到了一个答案,标题是“科学家和工程师Fortran 90”,内容如下:

还请注意,由于外部子程序驻留在与主程序不同的文件中,因此必须单独编译。在FTN90下,在具有.OBJ扩展名的文件中生成一种中间类型的机器代码,称为可重定位二进制代码。这反过来必须通过一个称为链接器的特殊程序与调用程序相链接,最终导致主程序的.EXE版本。您的编译器手册将提供如何执行此操作的详细信息。一旦最终调试完毕,外部子程序就不再需要重新编译,只需要链接。这可以防止您在一遍又一遍地编译它时浪费时间,如果它是一个内部子程序,就会是这种情况。

无论如何,我没有找到任何手册,如何链接主程序和子程序。我使用Silverfrost (柏拉图)来调试和运行这些程序。此外,我还在系统上安装了“英特尔并行工作室XE 2011”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-17 01:50:31

目前,我将假设外部子程序(函数或子程序)与主程序位于同一个目录中。在fortran77或更早的时候,您只需从主程序调用子例程,并将它们与主程序和子程序中存在的公共语句连接起来。然而,现在首选的方法是将外部子程序编写到模块中,并将模块与USE语句链接。例如,让我们组成一个虚构的子程序,读取'x‘值,并对其进行处理,将'y’和'z‘的值反馈给主程序。程序和模块看起来可能与下面的示例类似。从本质上讲,一个模块I fortran试图变得某种程度上是面向对象的,因为它确保数据被封装到程序中,除非程序员希望它是全局的,否则不能全局访问。如果子程序只由模块中的其他程序调用,如果要由主程序调用,则程序员声明子程序为私有程序是非常重要的。另外,为了确保数据被正确地使用,如果变量只被输入到例程中,或者被称为tot例程,工作并反馈到主程序中,则应该声明它为意图( in )、意图( out )或意图(INOUT)。我希望这会有所帮助,如果不是随便问其他问题的话。另外,当用外部子程序编译主程序时,按子程序的顺序调用它们。这意味着不要使用ifort main.f90 module.f90,而是必须在使用intel编译器的情况下输入module.f90 main.f90,如果没有,则用编译器使用的任何命令替换main.f90。

代码语言:javascript
复制
   PROGRAM MAIN
   USE Test
   IMPLICIT NONE
   REAL :: X,Y,Z
   X = 5.0
   WRITE(*,*) X,Y,Z
   END PROGRAM MAIN

   MODULE Test
   PUBLIC :: Subroutine_Example
   CONTAINS 

   SUBROUTINE Subroutine_Example(X,Y,Z)
   REAL, INTENT(IN) :: X
   REAL, INTENT(OUT :: Y,Z
   Y = X + 34.6
   Z = X - 1.4
   END Subroutine_Example
   END MODULE Test
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27469362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档