这里我有两个Fortran90文件和一个makefile:
文件 main_mod.f90的内容:
module main_mod
contains
subroutine add(a, b)
implicit none
integer, intent(in) :: a, b
print *, (a+b)
end subroutine add
end module main_mod
Run Code Online (Sandbox Code Playgroud)
文件 main_mod2.f90的内容
module main_mod2
use main_mod
contains
subroutine add2(a, b)
implicit none
integer, intent(in) :: a, b
call add(a, b)
end subroutine add2
end module main_mod2
Run Code Online (Sandbox Code Playgroud)
在makefile中,我自动生成当前目录中的".o"文件列表:
F90 = /usr/bin/gfortran
COMPFLAGS = -c
%.o: %.f90
$(F90) $(COMPFLAGS) $*.f90
all: $(patsubst %.f90,%.o,$(wildcard *.f90))
Run Code Online (Sandbox Code Playgroud)
当我创建项目时,make文件中的wildcard语句生成一个目标文件列表,如:
main_mod2.o main_mod.o
Run Code Online (Sandbox Code Playgroud)
然后编译失败,因为首先,需要编译main_mod.f90文件,这将给我们main_mod2.f90中使用的 …
我可以有一个指向目标数组的不连续部分的指针数组吗?在以下程序中:
program test
implicit none
integer :: i
integer, dimension(4), target :: orig
integer, dimension(:), pointer :: ref
orig = (/ (i , i = 1,4) /)
ref(1:2) => orig(1:2)
ref(3:3) => orig(4:4)
print *, 'orig = ', orig
print *, 'ref = ', ref
end program test
Run Code Online (Sandbox Code Playgroud)
我希望指针ref指向(/1,2,4/)目标数组的不连续部分orig.代码编译时没有警告,但是输出不是所希望的:
code output:
orig = 1 2 3 4
ref = 4
Run Code Online (Sandbox Code Playgroud)
看起来编译器强制指针指向一个连续的子部分,即使我首先指向索引1:2但编译器只强制指向4:4.结果,我在末尾的指针只指向一个条目.
我可以将条目打包(/1,2,4/)到另一个数组中然后连续使用它,但这对于大数据集来说不是有效的Fortran编码.你知道怎么做这个吗?