Fortran'call'声明:它实际上可以调用什么?

wha*_*ide 1 fortran fortran77 subroutine fortran90

我继承了大约400行非常古怪的Fortran 77代码,我试图逐步分析它,以便在我的脑海中清楚地表达出来.

无论如何,我有一个类似头文件(实际上是一个.h,但其中的代码是在fortran而不是C/C++中),其中有两个语句,称为getarg.h:

character*80 serie
integer ln
Run Code Online (Sandbox Code Playgroud)

然后我有另一个fortran文件(.f)调用getserie.h其中包含此代码:

subroutine getserie(serie, ln)
include 'getarg.h'
call getarg(1, serie)
ln = index(serie, ' ') - 1
return
end
Run Code Online (Sandbox Code Playgroud)

我的问题是:我可以call使用只有变量声明的外部文件吗?这样做有什么影响?

Vla*_*r F 6

不,你只能调用子程序.这意味着子程序被指定为subroutine.但是,子例程的定义不必在源文件中.它只需在链接时提供.

getarg子程序可能是你的编译器,其中一个内建子进程得到命令行参数.这意味着编译器会自动向链接器提供子例程的代码.

getarg.h不以任何方式调用该文件.它的内容只是直接复制到include语句的位置.

在某些情况下,您需要使用被调用子例程的(显式)接口,但在后来的Fortran版本中,90及更高版本.在这些现代版本中,您通常将子例程和函数放在模块中,以便编译器可以检查您是否正确调用它们.