• 締切済み

CとFortranのコードを併用する方法

昔からあったと思いますが、最近CとFortranを併用することを考えています。片方の言語で関数とかサブルーチンを作っておいてコンパイルしてオブジェクトをだけを作成し、もう片方の言語でそれを呼び出してコンパイル時にリンクして使用するという風に考えています。コンパイラの組み合わせが何でもいいとは思えないのですが、どのようにするものでしょうか。あるいはコンパイラ以外のツールが必要だとか。コンパイラは両言語ともGNU, intelなど提供元をそろえる必要があるとか、そういうことになるのでしょうか。よろしくお願いします。

みんなの回答

  • puikyua
  • ベストアンサー率0% (0/0)
回答No.3

最近の Fortran は、C言語との連携を強化するように規格でインターフェースなどを規定して固めてきているので、昔に比べるとはるかに容易に相互運用できるようになっている。 Fortran で subroutine や function を定義する時、bind という修飾子でリンカーに見える名前を決定できるので、C 形式のインターフェースを持つ言語とは、その名前でリンク出来る。また仮引数の宣言時に value 修飾子をつけると call by value で呼ばれるので、C 側ですべてを call by reference にする必要もなくなった。 Fortran 側で interface を定義して C API を呼ぶのも同様。 subroutine kitajima(x, n, z) bind(c, name = 'subrou') real, value :: x integer, value :: n real, intent(in out) :: z(n) ... 上の例では Fortran のサブルーチン kitajima が、リンカ―には subrou という名前にみえることになる。スカラー変数 x, n は値呼び出し、配列 z は参照呼出しされる。 単純な関数・サブルーチンを呼ぶくらいなら、Linux 系では gnu / intel / llvm などをくんずほぐれつ混ぜこぜにして行ける。特別、用意すべきものもない。標準ツールと標準文法の範囲内の記述で話は済む。昔のようにバラバラなベンダー拡張などに頼る必要が無くなった。(32bit Windows は命名規則の問題で厄介。) 派生型/構造体程度なら簡単に共有できる。ただ Fortran は OO 化や allocatable のスマート・ポインタ化が進んでいて、この辺を C と連携させるのは最新規格で論じられているところでまだ難しい。 仔細に及ぶことは以下のタイトルの文書を検索して読めば一応詳しく書いてある。 The new features of Fortran2003 The new features of Fortran2008 The new features of Fortran2018

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

とりあえず、お手軽なのはGCC(GNU Compiler Collection)かと。 CもFortranも含まれていますし考えておられることもできたはずです。

skmsk1941093
質問者

お礼

回答ありがとうございます。最近あまりそのことを説明する文献とかサイトが無くなっているように思います。Fortranをやる人の年齢があがって、新言語として学ぶ人が減ってこういう需要がなくなっているからかなと思いますが。若年層はPython, Juliaとかに向かうんだろうと思います。あとCを教養的に勉強しているとか。Fortranは高齢化しているように見えるのですが。

  • black2005
  • ベストアンサー率32% (1968/6046)
回答No.1

併用する理由は? メリットは皆無、デメリットしかないと思うのだが・・・ 両言語は、関数の引数や戻り値の扱いも異なるので混乱を招くだけでしょ。

skmsk1941093
質問者

お礼

回答ありがとうございます。いずれもライブラリなどのソースコードがすでに確立している場合、呼び出し側・呼び出され側の仕様に齟齬がなければお互い利用すべきではないかと思うのですが。ライブラリの幅は広がるように思います。特にFortran側から見るCの方がビット処理とか文字列とか得意分野あるように思いますし、昔と違ってCのライブラリも多くなっているように思います(書籍のサンプルとか)。Fortranのいいところは言語としてのバージョンアップが少なく、はっきり区別できるように思います(Cはいろいろあり過ぎかと)し、古いライブラリはたっぷりあります。 得意分野と資産を利用して幅が広がるのではないかと思います。20年ぐらい前からそういうことができていて説明もあったと思いますが、最近はどうかなと思っているのですが。

関連するQ&A