爲什麼此Fortran代碼不正確?函數結果中的訪問元素
function foo(x)
real x
real, dimension(3) :: foo
foo = (/1, 2, 3/)
end
...在主程序
print*, foo(x)(1)
爲什麼我們不能訪問直接作用結果元素?
爲什麼此Fortran代碼不正確?函數結果中的訪問元素
function foo(x)
real x
real, dimension(3) :: foo
foo = (/1, 2, 3/)
end
...在主程序
print*, foo(x)(1)
爲什麼我們不能訪問直接作用結果元素?
當你思考自己的問題
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的語法。當然你的編譯器不會說你知道,你寫的比我編程接受的語法要好,我現在編譯它吧...
非常感謝,我以爲我忘記了Fortran語法。或者我瘋了)恕我直言,這是不清楚的語法,但c'est la vie –
The answer by High Performance Mark告訴所有需要的。當你在語法上的善良之後,我會在那裏解決一件事:「小心地適當地聲明res」。
人們可以使用一個關聯構造來隱藏這一點。
associate (res => foo(x))
print *, res(1)
end associate
除了減少垃圾聲明之外,這不會改變該答案。
謝謝,我忘了'關聯'。局部變量'res'看起來更好。 –
因爲標準不知道這樣的語法。這個問題幾乎沒有任何意義。 –