2015-05-10 107 views
0

爲什麼此Fortran代碼不正確?函數結果中的訪問元素

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

...在主程序

print*, foo(x)(1) 

爲什麼我們不能訪問直接作用結果元素?

+1

因爲標準不知道這樣的語法。這個問題幾乎沒有任何意義。 –

回答

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語言的語法定義的方式來回應的方式嗎?即使這個過程以引用Fortran設計的根源(現在已經超過50年)的形式出現了答案,您仍然需要修改代碼以符合Fortran的語法。當然你的編譯器不會說你知道,你寫的比我編程接受的語法要好,我現在編譯它吧...

+0

非常感謝,我以爲我忘記了Fortran語法。或者我瘋了)恕我直言,這是不清楚的語法,但c'est la vie –

1

The answer by High Performance Mark告訴所有需要的。當你在語法上的善良之後,我會在那裏解決一件事:「小心地適當地聲明res」。

人們可以使用一個關聯構造來隱藏這一點。

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

除了減少垃圾聲明之外,這不會改變該答案。

+0

謝謝,我忘了'關聯'。局部變量'res'看起來更好。 –