Io fortran中的Read语句

Io fortran中的Read语句,io,fortran,Io,Fortran,我正在试图理解我的程序中的一个小读取函数,我正在试图解密。代码如下 READ (LREST, END=350, ERR=350) ICHR IF (ICHR .EQ. ICKLNK) THEN DO L = 1, 4 READ (LREST, END=350, ERR=350) ENDDO 所以基本上LREST是为这个函数所在的子例程提供的某种参数。然而,我发现LREST并没有在任何地方定义。使用grep查看LREST在我的*

我正在试图理解我的程序中的一个小读取函数,我正在试图解密。代码如下

 READ (LREST, END=350, ERR=350) ICHR

      IF (ICHR .EQ. ICKLNK) THEN
        DO L = 1, 4
          READ (LREST, END=350, ERR=350)
        ENDDO
所以基本上LREST是为这个函数所在的子例程提供的某种参数。然而,我发现LREST并没有在任何地方定义。使用grep查看LREST在我的*.f文件中的定义位置。所以我的问题是,在READ函数中,LREST在做什么。我认为LREST的位置是定义单元的位置

第二个问题是ICHR是一个16个字符的字符串变量,用于定义此子例程。然而,国际人权理事会的内容尚未分配。我不知道这个READ函数试图从中读取什么

转到IF语句,ICKLNK是另一个16个字符的字符串变量,具有已定义的字符串。因为ICHR没有定义,这是否意味着这个if语句从未被输入

最后,do循环或for循环中有变量L,但它甚至不用于循环内部的read函数

我是fortran的初学者,所以我可能只是缺乏一个非常基本的知识,但如果你知道我的问题的答案,请让我知道。谢谢


Han

如果是字符,则LREST指定的是单元编号或内部文件,这是正确的。您似乎认为LREST是这个子例程或函数中的一个参数,这意味着它的值由调用该函数的人传入。只向我们展示了一小段代码,所以很难提供进一步的细节

同样,您说ICHR是过程的一个参数,因此它接受调用传入的任何内容的值。ICLNK可能类似,但您没有显示所有代码


DO not for循环使用L作为计数器;它不需要在循环中被引用。

如果LREST是一个参数,它很可能在调用子例程的单元中有其他名称。这里要做的一件事是查找相应的open语句,即使ichr是伪参数,但它是未格式化的顺序访问,当然,除了在某些情况下,read语句会将值传递给它?这是正确的。代码似乎正在使用未格式化的read语句读取单个值,然后将其与ICKLNK进行比较。如果它们相同,则从LREST标识的单元中再读取四条记录。关键是找到LREST的原始定义。如果您在本地或作为参数查找LREST的定义时遇到困难,请检查例程使用的任何INCLUDE文件,或者如果是F90或更高版本,请检查从模块导入的内容,即使用一些_模块。我一直到main函数。因此,上面的小行嵌入到一个名为fldriv的子程序中,该子程序由另一个子程序sphedfb调用,该子程序由main.f调用。不知何故,这个变量LREST突然出现在子例程sphedfb中,尽管它没有在主调用SPHDIFB NMAX、LIN、LOUT、LINKCK、LINKTP、LRIN、LROUT、1 LRCRVR、LENLWK、LWORK、LENIWK、IWORK、LENRWK、2 RWORK、LENCWK、CWORK、LRATE、NMXROW、NMXCOL、NORD中定义,3 LH2O、LCO2、LCO