• 締切済み

FortranプログラムからC言語で実装された関数を呼ぶ方法

Windows Vista Home PremiumにFTN95をインストールしたPCにて、Fortranのプログラミングをし始め、「Cpad for Salford FTN77」を利用してプログラミングをしています(FORTRAN77・Fortran90ともに)。FTN95でのFortranプログラミングに際し、FortranプログラムからC言語で実装された関数を呼ぶには、どのように対処すれば可能になりますでしょうか?何分初心者ですので、拙い質問かと思いますが、何卒ご教示願います。

みんなの回答

  • kt1965
  • ベストアンサー率34% (116/339)
回答No.1

回答いたします。 ユーザーガイドの213ページ(アクロバットだと、231ページ)に出ています。具体的には、Fortranプログラム中に、C_EXTERNALという宣言をした関数は、Cの関数と同じくアクセスできるようになります。 そしてC側では、 #extern <返り値>関数名(引数)を与えれば、Cの関数として呼び込むことが出来ます。 ユーザガイドの仕様にしたがってサンプルを書いてみると。 サンプル2を例に取ります。 Fortran側 C_EXTERNAL WRITE 'WriteFile' : INTEGER*4 INTERGER*4 RESULT RESULT=WRITE() 以下続く 最後は、RETURN C側 #extern int Writefile(int); こんな感じですね。 では。

lagrange
質問者

お礼

上記の例を提示してくださり、ありがとうございました。ところで、コンパイルのほうですが、うまくいきません。 何が問題でしょうか?再度ご教示願います。

lagrange
質問者

補足

上記の例を提示してくださり、ありがとうございました。ところで、コンパイルのほうですが、うまくいきません。Fortran側でRETURNを最後に持ってくると D:\work\fortran> ftn95c /link /dreal sample.f D:\work\fortran>ftn95.exe /link /dreal sample.f /link [FTN95/Win32 Ver. 5.01.0 Copyright (c) Silverfrost Ltd 1993-2006] 0005) return *** RETURN cannot be inside a PROGRAM block 1 ERROR [<main program> FTN95/Win32 v5.01.0] *** Compilation failed となってしまうのです。「Cpad for Salford FTN77」を使ってコンパイルしています。 使っているファイルをいくつか書き出します。 <D:\work\fortran\sample.f> C_EXTERNAL WRITE 'WriteFile' : INTEGER*4 INTEGER*4 RESULT RESULT=WRITE() write(*,*) result return end <D:\work\fortran\sample.c> #extern int Writefile(int); <C:\Program Files\Silverfrost\FTN95\ftn95c.bat> ftn95.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 /link ちなみに、「Cpad for Salford FTN77」での実行/設定/実行/コンパイル時のパラメータは「/link /dreal」です。もちろんftn95.exeへのパスは通してあります。 何が問題でしょうか?再度ご教示願います。

関連するQ&A

  • FortranプログラムからC言語で実装された関数を呼ぶには?

    Windows Vista Home PremiumにFTN95をインストールしたPCにて、Fortranのプログラミングをし始め、「Cpad for Salford FTN77」を利用してプログラミングをしています(FORTRAN77・Fortran90ともに)。FTN95でのFortranプログラミングに際し、FortranプログラムからC言語で実装された関数を呼ぶには、どのように対処すれば可能になりますでしょうか? ユーザーガイドによれば、「Fortranプログラム中に、C_EXTERNALという宣言をした関数は、Cの関数と同じくアクセスできるようになり、C側では、#extern <返り値>関数名(引数)を与えれば、Cの関数として呼び込むことができる。」とのことがかかれています。 実際に使っているファイルをいくつか書き出します。 <D:\fortran\sample.f> C_EXTERNAL WRITE 'WriteFile' : INTEGER*4 INTEGER*4 RESULT RESULT=WRITE() write(*,*) result return end <D:\fortran\sample.c> #extern int Writefile(int); <C:\Program Files\Silverfrost\FTN95\ftn95c.bat> ftn95.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 /link ちなみに、「Cpad for Salford FTN77」での実行/設定/実行/コンパイル時のパラメータは「/link /dreal」です。もちろんftn95.exeへのパスは通してあります。何が問題でしょうか? 何分初心者ですので、拙い質問かと思いますが、何卒ご教示願います。

  • FORTRAN 複素数 (実部を取り出す方法)

    fortran77で複素数の実部を取り出したいのですが、 関数が存在するかわかりません。どなたか、ご存知の方、 教えてください。虚部は出せました。 FORTRAN77(SALFORD FTN77)を使っています。 確か、fortran90なら real(○+□i)だったと思います。

  • Fortranを学校と家で両方使うには?

    これから課題でFortranを使ってプログラムしなくてはなりません。Fortranが全くわからず時間もないので学校でプログラムした続きを自宅のパソコンでもしたいと思うのですが、学校で使っているツールと違っても大丈夫なのでしょうか? 過去の質問と回答からFTN77 Personal EditionやCPad for Salford FTN77などがフリーのツールだということは分かったのですが…。 大変初歩的な質問ですが、教えて頂けたらとても助かります。よろしくお願いします。

  • Fortran90/Fortran95→Fortran77

    大学の授業でFortranを使ったプログラミングを勉強しています。 以下の文が大学のPCに入っているコンパイラでは問題なくコンパイルでき実行できるのですが、家のPCだとコンパイルすることが出来ません(以下の文でエラーが出ます) 大学のPCの開発環境はFujitsu-FORTRANだと思います(^ ^; 家のPCはSalford FTN77 Personal Edition CompilerとCPad for Salford FTN77を組み合わせて使用しています なぜエラーがでるのか自分なりに考えた結果、Fortran90/Fortran95のプログラムをFortran77のコンパイラでコンパイルしているからだと思います(全くの勘違いだったら指摘して下さい) Fortran90/Fortran95の開発環境がフリーで整えばいいのですが、見つからないのでプログラムを修正したいと思います そこで、力を貸していただきたいのです 前置きが長くなりましたが、エラーが出る文は以下のところです open(8,file='freq_ex13.dat',action='write',status='replace') ここを、Fortran77のコンパイラでコンパイルできるようにアドバイスを下さい よろしくお願いします

  • FortranにあってCにない関数?について

    10年間Fortran90でプログラミングをしてきましたが、 C言語を使う必要があって、プログラムを書き直し中の者です。 入門書を数冊読んでいて疑問に思ったのですが、Fortranには、 A=SUM(B) と書けば、配列Bの全ての総和をAに返す、という関数があるのですが、C言語に同じような関数はないのでしょうか?(標準ライブラリに無いという事はないのでしょうか?) Fortranと比べてCは組み込み関数が少ないという印象を持ったのですが実際そうなのでしょうか? また、Fortanでは配列の和をとる時、 do i=0,n a(i)=b(i)+c(i) end do を一行で、 a(0:n)=b(0:n)+c(0:n) と書いても良いですし、もし定義されている全部の配列の要素が対象なら a=b+c と一行で書いても良いのですが、c言語では似たような書き方はできないのでしょうか? つまり、多次元配列を扱う時、Fortranでは単に「a=b+c」と書けば済むところを、Cでは for (i=0,i<=n,i++){ for (j=0,j<=n,j++){ for (k=0,k<=n,k++){ a[i][j][k]=b[i][j][k]+c[i][j][k]; }}} と書かなくてはいけないのか?と悩んでおります。 私がCの機能を知らないだけなのか、Cとはそうゆうことが出来ないのか、浅学なため判断できません。 ご教授ください、どうぞよろしくお願いいたします。

  • FORTRAN77で作ったプログラムを開くとバイナリファイルと認定され、編集できません

    FORTRAN77を最近勉強し始めました(プログラミング自体が超初心者です)。 ネットで情報を集め、コンパイラーはFTN77、エディタはCPadというフリーソフトを インストールし、実際にプログラムを作って実行してみたました。 一応は上手くいったみたいなのですが(非常に簡単な計算なので)、 いったんエディタを閉じて再び開いてみると、 「ファイル~~~はバイナリファイルと判定されました。無視して開きますか?」 という警告が出て、開いてみると意味不明な文字列が書いてあるだけで もともと何が書いてあったかわかりません。 どうしてこのようなことになってしまうのでしょうか?

  • C言語からのFortranプログラムの呼び出し

    Fortranで記述した以下のような構成の有限要素法プログラムをC言語から呼び出したいのですが,具体的にどのようなコードを記述すればいいのかがわかりません.お教えいただけないでしょうか. サブルーチンinputおよびoutputでは入力および結果ファイルの入出力を行っています. 当方C言語はほぼ初心者です.Fortranのプログラミング環境としてはVisualStudio2005およびVisualFortran9.1を用いています. C言語のプログラミング環境としてはおなじくVisualStudio2005を使用したいとおもっております. [メインプログラム] open (5,file='input.dat') open (6,file='output.dat') /入出力用のファイルを開く call input(parameter1) /各サブルーチンで有限要素法を実行 call bound(parameter2) call matrix(parameter3) call solve(parameter4) call output(parameter5) close (5) /入出力用のファイルを閉じる close (6) stop end

  • Fortranプログラムの戻り値を得る方法

    Fortranで作成したプログラム(exeファイル)をC言語プログラム(exeファイル)から 起動しようと考えています。 Fortran側のプログラム終了コードを取得したのですが、 そもそもFortranで作成したプログラムは起動元プログラムに戻り値を返せるのですか? (C言語のmain関数の戻り値のように) できない場合の解決策として、ファイルに終了コードを書いて両プログラム で共有しようと考えています。この方法は妥当でしょうか? 当方、Fortranは素人です。詳しい方がいましたら教えて下さい。

  • フォートランのプログラミング

    今、CPad for Salford FTN77を使った授業で宿題を出されたのですが最後の問題の課題7がわかりません。 何かひらめきそうなんですがなかなか答えがでずに困っています。 申し訳ないのですがヒントだけでも教えていただけないでしょうか?よろしくお願いします。

  • C言語のプログラムについて

    C言語のプログラムについて 3桁の自然数の中で、自分自身を含めた約数が奇数になるものがいくつあるかを求めるプログラムを作りたいのですが、swich文を使って、6通りの方法で出そうとしていまして、 while 文、 for文、 do while文に加え、 for文のを、1つの関数として独立させたもの、 さらに、for文のを重ループ部分のそれぞれのループに対応して、2つの関数として独立させたもの、 そして、この2つの関数のどちらともをループを用いずに再帰呼び出しを用いたもの の6通りで出したいのですが、swich文を使うところは自力でできたのですが、あとの6つそれぞれのプログラムの組み方がわかりません。 教えていただけないでしょうか?ややこしい書き方をしてすいません・・・。