我很抱歉,我的普通话不是很好,但是以下合法的Fortran 2008版本不是吗?
program test
implicit none
associate ( a => 6, b => 2*a )
print*, b
end associate
end program
我的编译器抱怨a
没有被声明并且没有隐式类型。
编辑:
我认为选择器只能是一个表达式或变量,而不能是一个关联名称或涉及一个的表达式。是这样吗?
答案 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
构造(如上面的示例)可以实现您想要的目标。