• 受付
  • 困ってます

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

  • 質問No.9644587
  • 閲覧数75
  • ありがとう数2
  • 気になる数0
  • 回答数3

お礼率 50% (336/669)

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

回答 (全3件)

  • 回答No.3

ベストアンサー率 0% (0/0)

最近の 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
  • 回答No.2

ベストアンサー率 28% (1360/4804)

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

お礼率 50% (336/669)

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

ベストアンサー率 32% (1966/6036)

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

お礼率 50% (336/669)

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

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ