0

Fortran では、次のように共通ブロックに関数を配置することは可能ですか? COMMON /myblock/ func (x は変数で、func は関数です)。

私の問題は、外部関数 func(x) を呼び出す関数 s(x) を作成したいが、s(x) で func を渡さないことです。私のプロジェクトでは、s(x) は 1 つの変数のみの関数でなければなりません。つまり、そうしたくありません: function s(x,func) s=func(x)

代わりに、私ができることを望んでいます: function s(x) common /myblock/ func s=func(x)

または、モジュールなどを使用して他の提案があれば、これは素晴らしいことです。

助けてくれてありがとう。

o.

次に、s(x) を呼び出すサブルーチンに同じ共通 (myblock) があります。

4

4 に答える 4

2

これを行う最新の方法は、関数へのポインターを使用することです。ポインターは引数として渡すことも、この質問の設計のためにモジュールに配置することもできます。たとえば、Fortran の関数ポインター配列を参照してください。

于 2011-05-22T20:05:38.623 に答える
2

これが移植可能な方法で可能であるとは思いません。一部の実装では、いくつかのトリックを使用してそれを行うことができます。

于 2011-05-22T15:47:47.567 に答える
1

これには共通ブロックを使用するのではなく、モジュールを使用することになっていると思います。func呼び出されたモジュールに関数を配置し、必要に応じて atステートメントをmyfunctions挿入します。use myfunctions

于 2011-05-22T16:43:51.333 に答える
1

現代の Fortran 標準では、これが禁止されています。Fortran 2003 の 5.5.2 から:

common-block-object は ... 関数名、エントリ名 ... であってはならない

いずれにせよ、グローバル変数を使用して非定数データを渡すのは、ひどい、ひどい考えです。ja72 が指摘しているように、モジュールを使用してこれを行うことができますが、サンプル コードでそれを示すことは拒否します。

于 2011-05-22T16:56:42.993 に答える