回 帖 发 新 帖 刷新版面

主题:fortran接口问题

大家好!


我最近想用fortran代码调用一个库函数,这个库函数是用c写的,发布者同时给了一个fortran接口,如下面的代码

interface

function spg( rot, tran, max_size, lat, &
& pos, types, nom, prec) bind(c)
import c_int, c_double
integer(c_int), intent(inout) :: rot(3,3,*)
real(c_double), intent(inout) :: tran(3,*)
integer(c_int), intent(in), value :: max_size
real(c_double), intent(in) :: lat(3,3), pos(3,*)
integer(c_int), intent(in) :: types(*)
integer(c_int), intent(in), value :: nom
real(c_double), intent(in), value :: prec
integer(c_int) :: spg
end function spg


end interface

写在一个module里,我打算USE这模块。我想先做测试,打印出rot和tran数组。但是,这两个数组都是不定大小数组,那个max_size变量应该是用来给它们最后一维分配个上限,我在fortran代码里就这么做的(或者我不用去分配?),这种情况下,我并不知道实际上限是多少,这怎么办?


我有本fortran书,但书里说不建议用不定大小数组,参数传递方面讲得很少,没太看明白,可能调用方法就不对,希望大家给点提示。谢谢!

PS. 我觉得可以将问题转换一下,应该是我对可变大小数组的使用不明白。书中说可变大小数组只能用于子程序或函数中,声明中其最后一维用星号。这点我非常糊涂,子程序中需不需要用allocate给它分配空间?如果不需要,调用时怎么办,我现在的做法是在主程序中给对应实参使用allocate进行分配,但正如我上面说的,那样的话我只能给实参数组最后一维设置成足够大,这很不爽。我总感觉可变大小数组应该没这么笨吧,否则还不如直接用allocatable声明,但我在各种书中、网上都没找到相关资料。

回复列表 (共3个回复)

沙发

北京私家侦探
上海搬家公司
网站制作

板凳













3 楼












我来回复

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