就像这样就可以了。不必使用可分配数组。
但是,在某些编译器下,这样可能会造成堆栈溢出。(stack overflow)
尤其是对 a 较大的情况下。
如果出现这种情况,你可以选择:
调大堆栈,具体 *** 作取决于你使用的编译器产品。
换用 allocatable 数组。
你的想法,叫做 “混合编程”,简称“混编”。
混编有多种方式,一般有:
1直接调用 C 编译后的 exe
2通过 DLL
3通过静态 lib
4通过编译器直接链接Fortran和C的obj
不管是 Fortran 还是 C 的语法,通常不会规定混编的具体内容。这些内容,是不同的编译器自行规定的。(至少绝大多数是)
所以,具体的 *** 作,也因你选择的编译器产品,因你选择的混编方式,而有较大的不同。
所以,我建议你:
1阅读你使用的 C 编译器和 Fortran 编译器的帮助文档,查看其中关于混合编程(mix-language)的章节。
2如果你阅读英文帮助有困难,至少告知你使用何种 C编译器,何种 Fortran 编译器。打算采用何种混编方式。
有很多方法。
第一,虚参和实参之间传递。这是用得最多的一种。
第二,主程序把数据写入文件,子程序读取。这是针对大量大量数据。
第三,使用 module,把数据放入 module 中,主程序和子程序共同 use 这个 module。
哑元需要声明。
如果不声明则按照 IN 规则,我建议用 Implicit None 取消 IN 规则,强制声明所有变量。
直接使用 use module 中声明的数据,则无需声明,其数据类型精度就是 module 中声明的。
subroutine 只有一种用法,只是其数据来源有多种,它的数据可以来自哑元,可以来自use的module,可以来自common(我不推荐),可以来自自己内部声明的局部变量等等。
一般我们不会把数据来源叫做一种用法。因为 100 个数据,可以其中37个来自于哑元,其中52个来自于module,其中11个是局部变量。
subroutine 的用法只有一种。那就是 call subroutine名字(实参,实参,实参)
以上就是关于关于fortran子程序中的局部变量全部的内容,包括:关于fortran子程序中的局部变量、一个fortran文件中有多个子程序,现在想用C调用这个文件中的一个子程序,要怎么调用、fortran中如何在主程序和子程序之间共享数据,除了common以外等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)