2016-08-22 16 views
2

を実行するのに失敗し、 次の行が(iprob = 202のための202のラベルにジャンプ)完璧に動作します:コンピューGOTOは、私は、Fortran 77のコード(のgfortranコンパイラ)で奇妙な動作が発生する

 if(iprob .eq. 202) goto 202 
     !...some commands... 
    202 continue 

しかし、その対応:

 GO TO (202), iprob 
     !...some commands... 
    202 continue 

はありません。このプログラムはiprob = 202のためだけに実行されます。

誰かがその問題について考えているのでしょうか?

+0

計算されたgotoのケースでは、 'iprob'は' 1'ではなく '202'という値を持っていますか? – francescalus

+0

はい、両方ともiprob = 202です。私はドキュメントを認識しており、計算されたゴーイングケースで何か間違ったものを見つけることはできません。したがって、私は困惑しています、なぜそれが失敗するのですか?潜在的に他のどこかでエラーがありますが、私はこれまでこれを見ていませんでした。 – user92202

+0

私の間違い!私はiprob = 1がジャンプするので、コマンドを逃した。混乱のために申し訳ありません – user92202

答えて

3

フォーム

go to (202), iprob 

は、文に計算され、外出先です。そのようなステートメントでは、ラベルのリスト(ここではただ一つ202)とラベルを選択する整数式(ここではiprob)があります。

ラベルの選択は、リスト内で順番に行われます。したがって、最初のラベルを選択するには、式の値は1でなければなりません。値202を持つiprobを使用すると、202番目のラベル(存在する場合)が選択されます。整数式が範囲外(1未満、リスト内のラベル数を超える)で、次の行に実行が続きます。あなたはそれを持っているので、gotoを実行しています。

ラベルは、式の値によって決まるステートメントに割り当てられていると考えるかもしれません。しかし、Fortran標準の一部ではないので、詳細については説明しません。

+0

ありがとう!それが問題を解決しました。 – user92202

+0

計算されたGOTO私はいつもいくぶん紛らわしいと感じました。私はこれがfortran77であることを知っていますが、fortran90のSELECTED CASEはこの場合に検討する価値があるようです。 – Holmz

関連する問題