2017-10-20 9 views
0

既存のサブルーチンA(a,b,c,d,e)は正常に動作しています。 a,b,cが実際の引数です。deは省略可能な引数です。サブルーチン引数リストのオプション引数のデフォルトの関連付けを無効にするにはどうすればよいですか?

多くの他のサブルーチンは、今

call A(a,b,c) 

または

call A(a,b,c,d=2.0D0) 

または

call A(a,b,c,e=1.0D0) 

としてサブルーチンAを呼び出します。

サブルーチンAからcを削除することにしました。

私はコードを再コンパイルするときだから、

subroutine A(a,b,d,e) 

となり、このよう

call A(a,b,c,e=1.0D0) 

としてラインは私が欲しいもの ないコンパイラで訴えていませんでした。今は、cは、私が 避けるように間違った解釈にすべての私のコードでサブルーチンAのすべての出現を検索することができ、新たなサブルーチンの オプションの引数dA(a,b,d,e)

であると考えて、私は、私は をつもりでも1それらのを欠場します(間違った結果、苦しい瞬間、...)しかし、 コンパイラに聞かせてもらうための良いトリックと私はそれらを必ず修正する。

これは私の質問につながります。私が=符号を入れていない限り、コンパイラに問い合わせることを避けるには 省略可能な変数のデフォルトの関連付け?つまり、 変数を使用する場合は、c=2.0D0e=3.0D0というように渡します。 =記号なしの場合、デフォルトの非標準の 引数にする方法はありますか?

cは ではないため、コンパイラは修正されたサブルーチンの既存の変数と一致していると確信しています。

+0

ようこそ[ツアー]と[お問い合わせ]をお読みください。適切な書式設定により、投稿がはるかに良くなります。 tag [tag:fortran]を使用します。古いタグと古いFortran 90の回答を制限したい場合は、[tag:fortran90]を追加することができます(通常は不要です)。 –

答えて

3

この動作を無効にすることはできません。 Fortranの標準規則ではこれが必要です。 Fortranではなく、別の言語を使用する必要があります。

これを防ぐには、すべての呼び出しで引数リストのすべての引数に対して名前付き引数を使用できます。

さらに、コードの再構成による変更を支援するツールがあります(code refactoring)。 grepsedの単純なコードエディタの検索と置換機能(プロジェクトやディレクトリ全体を検索できるはずです)を使用することもできます。

2

おそらく引数を削除する前に一時的な手段として、仮引数Cの型を別のものに変更します。たとえば、その引数に対して特別に作成する派生型のオブジェクトにします。プロシージャ定義でその変更された型を使用して再コンパイルすると、コンパイラはCに対応する位置引数を持つプロシージャにフラグを付けます。

(Cで使用する派生型を定義するモジュール例えば手順、そしてこのアプローチは常に手順の参照で指定された実引数を使用するようにコードのクライアントを強制する方法です)

:。

subroutine proc(a, b, c, d, e) 
    real :: a, b, c, d, e 
    optional :: d, e 
    ... 

type, private :: dummy 
end type dummy 

subroutine proc(a, b, c, d, e) 
    real :: a, b, d, e 
    type(dummy) :: c 
    optional :: c, d, e 
012に行きます
+0

これは、次世代のプログラマにとって不可解なメンテナンスの問題となる*一時的な対策*です。もし私がFortran 2008プログラムを持っていて、いくつかのサブルーチンのオプションの引数として使われている空の派生型を含んでいます。 Fortranが何を行っているのか誰にでも教えてもらえますか?* :-) –

関連する問題