• ベストアンサー

FortarnからCへ(ユーザー関数について)

asucaの回答

  • ベストアンサー
  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.1

Fortran 7準拠の物だったら拡張版などではポインタの概念を取り入れた物もありますが標準ではありませんのでポインタを使わずに行うことで元のソースと似たものを書くことはできます。 後は高速性などへの配慮などでポインタを使って直していくことも可能です。

参考URL:
http://www.promula.com/fortrantoc/

関連するQ&A

  • C言語での関数の引数の受け渡しについて

    C言語での関数の引数の受け渡しについて教えてもらいたいのです。 char *p=Goo;  というポインタpがmain関数で定義され、このポインタpをある関数 void func(・・・) に渡すことは出来ますか? つまりポインタを実引数として扱うことはできるのかという事ですが・・・ int p=10; とかだったら、 void func(int test) の関数には、main関数で func(p) で仮引数testにわたせると思うんですが・・・ もし出来るようでしたら、関数の渡し方と定義の記述を教えてください。 どうか宜しくお願いします。

  • 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へのパスは通してあります。何が問題でしょうか? 何分初心者ですので、拙い質問かと思いますが、何卒ご教示願います。

  • c++の関数をfortranから呼びたい

    c++の関数をfortranから呼びたい windowsXPのコマンドプロンプト上で VC2005でコンパイルしたc++の関数を fortranから呼びたいと思います。 fortranのソースはg77でコンパイルします。 (g77とclコマンドは動作することが 確認出来ています。) 簡単なソースとコンパイル方法を教えて 頂きたくお願いします。

  • C言語の高階関数についてです。

    C言語の高階関数についてです。 double f ( (*g)(double) ){...} とすると「関数を引数にする関数」が作れますが、 「関数を引数にする関数」を引数にする関数って作れますか??? その場合は、引数のところどうやって書けばいいでしょうか??

  • Visual C++とVisual Fortranの変数を共用したい

    FORTRANで作成したサブルーチンを活用し、C++からコールする形でコードを再利用しようと考えています。 C++からFORTRANを呼び出すのはすぐに出来たのですが、データの引渡しで困っています。 FORTRAN側ではグローバルな変数を多数(100個以上)宣言しており、引数としては渡せないのでC++側でも同名の変数を宣言して共用し、データのアクセスをしようと目論んでいます。FORTRAN側のコードは極力触りたくありません。 しかし、FORTRANでexternに相当する宣言の仕方が分からず、うまく同じ領域を共用できるようになっていません。 具体的にどんなことをすれば良いのかご存知の方がいらっしゃいましたら、ぜひご教授願います。 宜しくお願いします。

  • JNAで関数ポインタの表し方

    JNAで関数ポインタの表し方 JNAを利用してC言語の関数をJavaで利用したいのですが、その関数の引数に関数ポインタが含まれていて、使い方が分かりません。 関数ポインタ型のJavaのマッピングはどうすればいいのでしょうか? つまりJavaの特定のメソッドをその関数内からコールバックさせたいです。

  • 配列の受け渡しについて

    ある関数で、引数としてやりとりするデータが多いため、構造体にまとめて受け渡しするようにしています。 その構造体のメンバにポインタ変数を設け、2次元配列のポインタを受け渡しするようにしたいのですが、受け取った側でそのポインタを"2次元の配列"として扱うことができずに困っております。(2次元であることが認識できない?) 配列そのものを受け渡しする方法以外で、これを解決する手段はないでしょうか? (ANSI-Cです)

  • 関数に値の代入 [C言語]

    C言語初心者です。関数とポインタについて勉強していたのですが、ふと関数の型を知りたくなってVC++で型を調べてみたんです。そしたら、void型で引数のない関数の型は void (__cdecl*)() となっていました。voidと__cdeclはわかります。 そしてこれ型に*が入ってるじゃないですか。ということは関数はポインタということになると思います。なので私はもしかしたら値の代入ができるのではないか、と思ったのです。早速、 f1=f2;(f1とf2は型と内容の同じ関数) や、 (*f1)=(*f2); としてポインタの中身や参照先の関数の実態の値を処理中に書き換えてみようとしました。ですが、多分そうなるとは思ったのですが、コンパイルエラーが出ました。 《エラーの内容》 error C2106:'=':左のオペランドが、左辺値になっていません。 warning C4550:式は引数リストのない関数として評価します。 関数を書き換えようとすること自体馬鹿げていることは重々承知です。でも、微かにいけそうな気がするんですよ。代入させたくないなら関数の型は一律constにすると思うし(実際関数をconstをつけて宣言してもOKだった、(プロトタイプ有り無しでも))、関数への代入は問答無用で駄目なのならばそういうエラーメッセージを出すと思うんです。 関数の書き換えは100%無理でしょうか?それとも関数を書き換える方法があるでしょうか?回答よろしくお願いします。

  • ABAQUS ユーザーサブルーチンの使用について

    ABAQUSで解析を行っております。 今回、FORTRANで記述したユーザーサブルーチンを使用することになりました。 ABAQUSサポートに問い合わせたところIntel FORTRANコンパイラのみ サポートしているとのことでしたが、今回のみの使用のため、フリー コンパイラもしくは、コンパイル済みのファイルを使用して解析が できないかと考えています。 Intelコンパイラを使用せずにユーザーサブルーチンを使用する方法 をご存知の方がおられましたら方法を教えていただけないでしょうか。 以上、よろしくお願いいたします。

  • Cで関数とポインタと構造体の表現法

    C言語の関数で 構造体・共用体の入った配列を関数にポインタで送りたいと思うのですが上手くいきません プロトタイプ宣言とメイン文での表現・関数そのものでの表現 が詳しく知りたいのですがサイトまたは記述方を教えてください。 上記の条件で ポインタは*をつけるつけない 関数で引数はどうやって選ぶのか 構造体名などはどのように表現すればいいのか などの見分けがいまいちつかないので悩んでいます。