2017-08-29 115 views
1

我確定這個解決方案非常基礎,但我很難弄清楚如何在Fortran中使用函數。我有以下簡單的程序:如何在Fortran中創建函數?

PROGRAM main 
    IMPLICIT NONE 
    INTEGER :: a,b 
    a = 3 
    b = 5 
    PRINT *,funct(a,b) 
    END PROGRAM 

    FUNCTION funct(a,b) 
    IMPLICIT NONE 
    INTEGER :: funct 
    INTEGER :: a,b 

    funct = a + b 
    END FUNCTION 

我嘗試的這個若干變化,包括分配功能之前一個數據類型,本功能的結果分配給在主程序另一個變量並打印該變量,並且移動PROGRAM塊上方的FUNCTION塊。這些都沒有奏效。在當前的程序,我得到第6行(與PRINT語句行)的錯誤:

Error: Return type mismatch of function 'funct' (UNKNOWN/INTEGER(4)) 
Error: Function 'funct' has no IMPLICIT type 

從所有我已經試過了導遊,我似乎是這樣做的權利;至少有一個變體或其中一些變體的組合應該起作用。我如何需要更改此代碼以使用該功能?

+0

的問題是,你用'隱none',而你沒有給'funct'一個宣言。你必須添加'integer,external :: funct'。 –

+0

謝謝,這個和皮埃爾的答案都奏效了。 – zbz323

回答

2

只要將該功能放入文件中,主程序就不會訪問該功能。

傳統上,您可以簡單地聲明一個函數爲external,編譯器只是希望在編譯時找到合適的聲明。

現代Fortran在「模塊」中組織代碼和數據。爲了您的目的,但是,它是簡單的主程序的範圍內,以「遏制」的功能如下:

PROGRAM main 
    IMPLICIT NONE 
    INTEGER :: a,b 
    a = 3 
    b = 5 
    PRINT *,funct(a,b) 

CONTAINS 

    FUNCTION funct(a,b) 
    IMPLICIT NONE 
    INTEGER :: funct 
    INTEGER :: a,b 

    funct = a + b 
    END FUNCTION funct 
END PROGRAM main