FORTRAN语言:module中的子程序中定义的数组是全局变量吗

FORTRAN语言:module中的子程序中定义的数组是全局变量吗,第1张

Fortran 语言里没有全局变量这个叫法。

一些老的教科书习惯把 common 里的变量,称为全局变量。其实是不对的,应该叫“未命名的common 数据”。

module 中定义的变量,可以在 use 了该module 的程序单元里通用,并共享同一个内存空间。前提是该变量有 public 和 save 属性。(如果没有指定save,则默认具有save属性。如果没有指定 private,则默认具有 public 属性)

而 module 中的子程序,其内部的变量,与常规的子程序的内部变量一样,其值在该子程序范围内有效。退出该子程序后,其地址和值就变为不确定。

除非你指定了它具有 save 属性。

子程序中具有 save 属性的变量,在下次进入子程序时,保留上一次的值。但也不能在子程序之外直接使用它。

1函数可用于表达式中,而subroutine不可以;

2subroutine类似于c/c++中的没有返回值即void函数。

3比如有以下函数function Fun(bbb) result(aaa)

然后调用ccc= Fun(bbb)

function要把结果aaa拷贝然后复制到aaa,而subroutine不用拷贝复制,所以subroutine比function速度更快,更省内存。

就跟在主程序里面的定义函数一样,主程序和子程序的变量也可以是相同的,

如,subroutine (,,、、)

implicit none

real :: a,b,c,d、、、、

、、、

real,external :: add

c=add(a,b)+d

、、、、

return

end subroutine

function add(a,b)

implicit none

real :: a,b

real :: add

add=a+b

return

end

大概就是这样

子程序和主程序写在同一个文件里就可以了。

如果分开写,那么分别编译,然后一起链接。代码上不需要任何改动。跟同一个文件一模一样。

至于如何建立工程,这是 *** 作的问题。

Fortran 是一门语言,本身没有任何 *** 作问题。

全球支持Fortran语言的编译器有数十种,不同的编译器又使用若干种不同的编译环境。

例如 Compaq Visual Fortran,Intel Fortran 分别使用 VC6 和 VS 作为编译环境。Ftn95有自己的集成环境,叫Plato。甚至一些开源的,开放的编译环境经过配置,都可以使用Fortran的各种编译器。

这些 *** 作方法问题,也因为不同的编译环境而不同。

你的问题,就好像问:“英语如何查短句” 一样。英语本身是语言,不存在 *** 作问题。

如果你要问,也应该类似这样问:“金山词霸如何查短句”??

类似的,你的问题,也应该是类似:“Compaq Visual Fortran 怎么建立工程” 或者其他编译器如何如何。

以上就是关于FORTRAN语言:module中的子程序中定义的数组是全局变量吗全部的内容,包括:FORTRAN语言:module中的子程序中定义的数组是全局变量吗、fortran中除了主程序还有子程序和函数之分请问这两这的区别是什么为什么要如此分、请教大神 如何在fortran 子程序中再定义函数进行运算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10123793.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存