在同一ASSOCIATE构造中引用另一个关联实体中的关联名称

时间:2018-10-17 16:05:06

标签: fortran

我很抱歉,我的普通话不是很好,但是以下合法的Fortran 2008版本不是吗?

program test
  implicit none

  associate ( a => 6, b => 2*a )
    print*, b
  end associate

end program

我的编译器抱怨a没有被声明并且没有隐式类型。

编辑:

我认为选择器只能是一个表达式或变量,而不能是一个关联名称或涉及一个的表达式。是这样吗?

1 个答案:

答案 0 :(得分:1)

这是一个(嵌套的)版本,可以满足您的要求,并且您的版本不符合Fortran标准,

program test
implicit none
integer a ! note that a has be defined here because it is used as a VARIABLE in the association list below
associate ( a => 6, b => 2*a )
    print*, b
end associate
associate ( a => 6 )
    associate ( b => 2*a )
        print*, b
    end associate
end associate
end program

这是Gfortran编译的程序的输出,

$gfortran -std=gnu main.f90 -o main
$main
   483386368
          12

根据Fortran标准,associate构造允许一个名称与变量或表达式的值相关联,在一个块的持续时间内。这是一般语法,

[ construct-name: ] associate ( association-list )
    block
end associate [ construct-name ]

因此,我相信您对associate构造的使用不符合该标准。基本上,在您的代码中,编译器假定关联列表a中的b => 2*a引用了已在关联构造和列表之外定义的变量a(与在关联列表中定义的名称a

正如@HighPerformanceMark所建议的那样,嵌套associate构造(如上面的示例)可以实现您想要的目标。