2017-02-27 7 views
0

サブルーチンを呼び出す際に問題が発生しています。まず、IF文の中でサブルーチンを呼び出せますか?別のサブルーチン内でサブルーチンを呼び出す

IF (...) THEN 
    ... 
ELSE 
    CALL sub1(...) 
END IF 

2番目の質問です。 Sub1はその中のsub2を呼び出します。次に、sub2にはメインプログラムからの入力があり、xと言うことができます。

MODULE mod1 
    ... 
CONTAINS 

    SUBROUTINE sub1(w) 

    IMPLICIT NONE 
    INTENT(OUT) :: w 
    REAL :: x, z 

    CALL sub2(x, z) 

    w = z + 1 

    END SUBROUTINE sub1 

    SUBROUTINE sub2(x, z) 

    IMPLICIT NONE  
    INTENT(IN) :: x 
    INTENT(OUT) :: z 

    z = x + 1 

    END SUBROUTINE sub2 

END MODULE mod1 

PROGRAM prog 

    USE mod1 
    IMPLICIT NONE 

    IF (...) THEN 
    ... 
    ELSE 
    x = y 
    CALL sub1(w) 
    x = w + y 
    END IF 

END PROGRAM prog 

注:変数間の追加が行わ

を取って、正確な数学的な操作ではありません基本的にすべての変数は、お互いに依存しますが、X = Yは、私が唯一の方法だと思うの初期状態でありますこれはうまくいくかもしれない。 sub2が最初のx = yでピックアップされていないようで、sub1から呼び出されたときにその値をsub1に与えているようです。だから、私は変数がどのように渡されているのか分かりません。私が得ているエラーは、コンパイル時ではなく、私がsub1内のsub2と呼ぶ行につながる実行時エラーです。どんな助けも大歓迎です。

+0

既存の回答をナンセンスに変更しないでください。新しいコードで新しい質問がある場合は、新しい質問をしてください。または、彼の答えがわからない場合は、最初に誰かに尋ねてください。 –

+0

あなたの変更が実際のコードであると言えば、元に戻しましたが、次のようにします。 2.あなたが持っている答えと私がリンクした質問に対する答えを読んでください。サブルーチンの 'x'と' y'はローカル変数です。暗黙的に宣言されているか、 'real x、y'で宣言しても問題ありません。それらはまだサブルーチンのローカル変数です。 –

+0

混乱を招くわけではありません。私は今理解しています、ありがとう。 – Dtaai

答えて

0

すべてのプログラムとモジュールの先頭にimplicit noneを使用してください(その前にはUSE文があります)。次に、すべての変数を明示的に宣言してください。

サブルーチンをあなたと同じように呼び出すことはできますが、変数の範囲を考慮する必要があります。

例では、sub1は、メインプログラムのローカルプログラムであるため、メインプログラムのxyにアクセスできません。

+0

申し訳ありません、ただ編集しました。私は実際のコードでそれを持っています。この場合、sub1はxまたはyを必要としませんが、メインプログラムからxが必要なsub2からzが必要になります。 – Dtaai

+0

リンク先の質問に私の答えを見てください。 xとyは、サブルーチンとメインプログラムで同じxとyではありません。 –

関連する問題