4.8 参数传递和顺序关联 BACKWARD FORWARD


对于过程调用中的实参,Fortran允许一个数组元素(标量)与一个数组哑参建立关联。进一步讲,允许哑参的形状不同于相应数组实参的形状,这时,实际上要通过过程调用对实参进行重定型。Fortran存储顺序特性被用于标志哑参的值。FORTRAN 77中就已具有这一特征,它被广泛应用于向过程传递子数组的起始地址,以及一个较大数组的行或列。由于在HPF中数组被潜在映射到多处理器上,因此不完全支持这一特征。

4.8.1 顺序相联规则

1.当一个数组元素或一个已假定大小的数组名被用作一个实参时,与其相关联的哑参必须是一个标量或被指定为一个顺序数组。

一个非顺序数组的数组元素指示器一定不能与数组哑参建立关联。

2.当一个实参是一个数组或数组区域且相应的哑参与实参在形状上不同时,则实参和哑参都必须是顺序的。

3.如果一个字符类型的对象(标量或数组)符合2.8.1.1节中定义4的要求,则它是非顺序的。如果一个具有显式长度的字符哑参的长度不同于实参的长度,则哑实参数都必须是顺序的。

4.如果没有一个显式接口,则顺序实参不能与非顺序哑参建立关联,同时非顺序实参也不能与顺序哑参建立关联。(这一条仅是4.6节的重复部分)

4.8.2 顺序相联讨论

当一个数组哑参的形状与其相应的数组实参不同时,实参一定不能是一个表达式。在HPF中没有一种机制能够将数组表达式的值定义为顺序的。为了将这种实参表达式与具有不同维数的哑参建立关联,必须首先根据2.8.1.1节中的定义4,将实参赋值给一个强制为顺序的命名数组变量。

4.8.3 顺序相联的例子

给定下列子程序段:

    SUBROUTIONE HOME(X)
    DIMENSION X(20,10)

根据规则1,仅当X在HOME中被定义为顺序的且ET在调用过程中也是顺序的

    CALL HOME(ET(2,1))

才是合法的。

同样,根据规则2和4

    CALL HOME(ET)

要求或者ET和X都是顺序数组,或者ET和X具有相同的形状且(在缺乏显式接口的情况下)具有相同的顺序属性。

规则3为字符类型的对象给出了一个专门的考虑。如下所示:

    CHARACTER(LEN=44) one_long_word
    one_long_word='Chargoggagoggmanchaugagoggchaubunagungamaugg'
    CALL webster(one_long_word)

   SUBROUTINE webster(short_dictionary)
   CHARACTER(LEN=4)short_dictionary(11)
       !注意,例如,short_dictionary(3)的值是'agog'

跨越过程时,改变字符对象的长度在Fortran中概念上是合法的。在HPF中,实参和哑参必须都是顺序的。


Copyright: NPACT BACKWARD FORWARD