功能结果中的访问元素

时间:2015-05-10 14:33:26

标签: arrays function fortran

为什么这个Fortran代码不正确?

function foo(x)
real x
real, dimension(3) :: foo
foo = (/1, 2, 3/)
end

......并在主程序中

print*, foo(x)(1)

为什么我们不能直接访问函数结果中的元素?

2 个答案:

答案 0 :(得分:3)

当你思考自己的问题时

Why we cannot access element in function result directly?

我建议您在主程序中编写行,例如

res = foo(x)     ! having taken care to declare res appropriately
print*, res(1)

继续你的编码。以你尝试过的方式索引函数调用在语法上是不正确的。

因此,对原始问题的一个答案是,因为这是定义Fortran语法的方式,可能会提示您回复为什么Fortran的语法是这样定义的? Even如果这个过程以Fortran设计的根源(现在超过50年)的形式出现了答案,那么你仍然需要修改你的代码以与Fortran的语法保持一致。肯定你的编译器不会说你知道,你编写的内容比我编程接受的语法要好,我现在就编译好了...... < / p>

答案 1 :(得分:1)

answer by High Performance Mark告诉所有需要的人。正如你在句法上的好感之后我会在那里解决一件事:&#34;已经注意适当地宣布res&#34;。

可以使用关联构造来隐藏这一点。

associate (res => foo(x))
  print *, res(1)
end associate

除了减少垃圾声明之外,这在答案中没有任何改变。