2016-05-17 38 views
3

我對fortran函數的各種語法感到困惑。正確的fortran函數語法

function func(i) result(j) 
... 
end function fun 

這裏是第二個例子

real function func (x) 
... 
end function func 

這是第三個例子

real function func (x) 
    ... 
    return 
    end function func 

哪一個適當的語法按照現代Fortran標準?在第二和第三個例子中,如果我在real類型的程序中聲明多個變量,編譯器如何知道要返回哪個變量?

+1

@HighPerformanceMark我同意 - 雖然相關,但這不是重複的(至少) – OMGtechy

回答

4

根據具體情況,所有示例都是合適的。這方面的問題歸結爲風格偏好。

如果打開函數語句沒有RESULT說明符,則函數體內的函數結果與函數具有相同的名稱。

您可以在打開的函數語句中使用RESULT說明符(如第一個示例中所述),以將函數結果的名稱更改爲其他名稱。

您可能想要這樣做,因爲您更喜歡使用除函數名稱之外的函數結果的名稱。如果您真的想遞歸調用該函數,則可能需要執行此操作。

您可以在打開的語句中指定函數的類型(按照第二個或第三個示例),或者可以在函數本身的規範部分(正文)中指定函數的類型(這是你的第一個例子中可能發生的情況,隱式鍵入除外)。函數結果的屬性必須在主體中指定,因此作爲風格問題,有些人更願意將所有內容都放在函數體中(這也避免了與範圍和定義順序相關的一些模糊複雜問題)。你不應該使用隱式輸入。

您的最後一個示例只是在函數的可執行部分末尾有一個顯式的return語句。這是多餘的 - 當執行到達函數的可執行部分的末尾時,該函數自動返回。有些人更喜歡明確的return,也許是因爲他們深深地擔心編譯器可能突然忘記自動返回,而另一些人則認爲這是荒謬的愚蠢。

重複 - 如果在打開的函數語句中沒有RESULT子句,則函數結果的名稱是函數名稱,否則它是結果子句中的名稱。