• ベストアンサー

fortranで、C言語のsizeof関数に相当するものが分からない

データ型のバイト数を調べる際、C言語ではsizeof関数が用いられますが、Fortranではどうすればよいでしょうか? 一つの関数でなくとも、そのような機能をもつルーチンでも構いません。

  • amu
  • お礼率51% (47/92)

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

#1です。 バイト数を気にするなら変数宣言の時に、 INTEGER*8 N,K INTEGER*4 I REAL*16 A(10),B(10,10) などのようにバイト数を明示指定すればいい。Fortranのメインターゲットの大規模数値演算のときにバイト長というか有効数値範囲を知らないままで計算するというのはありえないです。 Cは型の弱い言語(型に厳密でない)なので、バイナリ入出力の変数の読み書きにバイト数の指定が必要ですが、型の強い言語だと、変数名さえ書けば長さはコンパイラが知っています。 もちろん他システムとバイナリデータの交換をする時はデータのバイト長を取り決めてそのバイト長で入出力する必要はあります。そういう時は上記のようにバイト長を明示して宣言します。

amu
質問者

補足

お返事ありがとうございます。 Cからプログラミングに入っていたので、型宣言は処理系依存であいまいなものだと思っておりました。 バイト長を明示すればよいということで納得できました。ありがとうございました。

その他の回答 (2)

  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.2

残念ながら、fortran単体では出来ないと思いますね。 オーソドックスなfortranは全てアドレス渡しで、equivalenceやレーベルコモンでトリッキーなことをしない限り、sizeof(関数ではなく、演算子です)が必要になることはないからです。 また、システム記述をするための言語ではないので、ポインタをユーザーが操作するようにはなっていないのが大きいと思います。構造体や共用体を明示的に使うことも出来ない(トリッキーにすることは出来る)し。 sizeof自体、私が使っていた(経験30年、FORTRANで言語処理系を書いたこともある)中では、一度も必要に思ったことはありません。 何をしたいのか書いていただければ、もう少しアドバイスできるかと思います。

amu
質問者

補足

ありがとうございます。 Cであれば同じint型でも処理系によってバイト数が異なるので、Fortranでも同様に処理系に依存すると思っておりました。 そもそもFortranではintegerといえば4バイトと決まっているのでしょうか? Cのsizeof関数は、fread、fwriteで書き込むときに、型のサイズを知るために使われないですか? 例えば、fread(&i,sizseof(int),n,fp)のようにです。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

基本型についてはバイト数をプログラム上で調べることは出来ないと思います。 主として数値計算に使われるので、基本型のバイト数は知っている、もしくは指定するという考え方なんだと思います。 配列の大きさ(要素数)は、size関数でわかりますが、一つの要素のバイト数がわからなければ全体のバイト数はわかりません。要素の型のバイト数を知っていれば掛け算で求まりますが。

amu
質問者

お礼

ありがとうございます。 元々バイト数は既知という前提の言語なのですね。

関連するQ&A

  • 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とはそうゆうことが出来ないのか、浅学なため判断できません。 ご教授ください、どうぞよろしくお願いいたします。

  • C言語→Fortranへ

    今学生である私はデータ整理のため、 Fortranを使用し、データ整理を行う予定です。 授業で若干Fortranは扱ったことがあるのでわかります、 今私がやりたいガウスの消去法のn次多項式の例をネット上で探してるのですが、 ほとんどがC言語で紹介されています。 以下のページをFortranにかきかえてもらえるとありがたいです。 http://www.geocities.jp/supermisosan/saisyounizyouhou2.html

  • C言語をFORTRANへ

    C言語で記述したプログラムをFORTRANに翻訳というか書き直してくれるソフトはないものでしょうか? FORTRANをCに書き直すソフトなら存在するんですけど・・・

  • C言語とfortranでのデータの受け渡しについて

    はじめましてc_f_gaussと申します。 現在fortranで動的に配列を得るためにC言語を使用し 配列を確保しそのアドレスをfortranで定義してある 配列のアドレスと交換したいのですがどのようにしたら よいでしょうか? 今の段階ではC言語側でアドレスを交換してもfortran 側に戻ると元のアドレスに戻ってしまいます。 fortranとC言語でデータ受け渡すには何か必要な手続き があるのでしょうか?

  • 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コマンドは動作することが 確認出来ています。) 簡単なソースとコンパイル方法を教えて 頂きたくお願いします。

  • Fortran と、C言語のデータの受け渡し

    Micro Soft Visual C++ 上で Fortran と、C言語のデータの受け渡しをしたいのですが、例えばC言語でint型のi,jを読み込み、Fortranでi,jを受け取り、その和kを求め、kをC言語に受け渡し、printfでkの値を表示させるプログラムはどんな感じになるんでしょうか? お手数ですがCとFortranのソースコードを教えていただけたらうれしいです。 また、Micro Soft Visual C++ 6.0 と Visual Fortran 6.1a ではできないのでしょうか? 教えてください。

  • FORTRANからC言語へ

    FORTRANで記述したプログラムをC言語に翻訳というか書き直してくれるソフトはないものでしょうか?

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

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

  • FORTRANとC言語のデータ受け渡し。

    卒業論文で計算プログラムをくんでいるのですが、 教授から、とりあえずa,bをCでscanfしてそれをFortranに渡し、 足し算させ和cを出し、それをC言語に持って行き、printfさせるプログラム を組んでみろと。C言語はそれなりにわかるつもりですが、Fortranはさっぱりです。データの受け渡しわかる方教えてください。