bob*_*nto 1 fortran fortran77 fortran90
我正在使用一些遗留的FORTRAN代码.作者定义了一个名为REDUCE_VEC()的函数(不是子程序,而是一个重要的函数).它接受一维数组并返回一个标量实数*8.因此,如果您想"减少"矢量,则可以调用该函数
RV = REDUCE_VEC(V1)
Run Code Online (Sandbox Code Playgroud)
一切都很好.但偶尔,他的线条看起来像
CALL REDUCE_VEC(V2)
Run Code Online (Sandbox Code Playgroud)
那么,有两个问题:1)这第二种形式的电话有什么作用?(注意,没有办法返回数据.)2)这甚至不会在gfortran下编译,即使它与PGI一起编译,所以这甚至是合法的FORTRAN?
谢谢.
如果接口是隐式的,这将使用许多处理器进行编译,因为编译器无法检查它,它只是调用一些符号.考虑以下:
function f(a)
dimension a(*)
f = 0
do i=1,10
f = f + a(i)
end do
end function
program p
call f([1.,2.,3.,4.,5.,6.,7.,8.,9.,10.])
end program
Run Code Online (Sandbox Code Playgroud)
编译,甚至不会立即崩溃ifort,sunf90而且gfortran只有当它在单独的源文件中时才编译,然后结果也不会在我的机器上崩溃.如果将返回值置于寄存器中,则可能不会对程序的其余部分造成损害,但是否则很可能会发生堆栈损坏.