いくつかの C/C++ アプリケーションから呼び出される小さな Fortran ライブラリ (新しいコード) に取り組んでいます。ライブラリは、ほとんどすべてのサブルーチンをアプリケーションから個別に呼び出すことができるような種類のものです。そのため、これらのサブルーチンに C インターフェイスを提供する必要があります。
- それだけでとても快適なモジュールを使用できます。ただし、モジュール名のマングリングを手動でデコードする必要があります (gfortran ではそれほど難しくありませんが、見栄えが悪い) か、
bind(C,name="some_name")
節を使用します。最後のものは、サブルーチンパラメーターが明示的に相互運用可能にされていないなどのコンパイラー警告につながります (したがって、コンパイラーは、たとえば、に置き換えることdouble precision
を望んでいます)。real(kind=C_DOUBLE)
この場合、ライブラリ内のほぼすべての変数をそのような醜い宣言に置き換える必要があります。これにより、コードが読みにくくなります。 - ライブラリ内のすべてのファイルが複数のサブルーチンで構成されている場合、サブルーチンを使用できます (これが現在私が行っている方法です)。それらの間で明示的にインターフェースが供給されますが、
interface ... include "otherfile_h.f90" ... end interface
これはあまり快適ではありません。この場合、名前マングリングはかなり単純で、ライブラリのサブルーチンは C から簡単に直接呼び出すことができます。
私が使用するアプローチ (箇条書き 2) では、より多くの入力が必要であり、ソース/ヘッダー ファイルで定義が重複しているため、エラーが発生しやすくなります。スマート C インターフェイスを使用して、ソースを明確で読みやすい状態に保つためのより良い方法はありますか?