- ベストアンサー
fortranで、C言語のsizeof関数に相当するものが分からない
データ型のバイト数を調べる際、C言語ではsizeof関数が用いられますが、Fortranではどうすればよいでしょうか? 一つの関数でなくとも、そのような機能をもつルーチンでも構いません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 バイト数を気にするなら変数宣言の時に、 INTEGER*8 N,K INTEGER*4 I REAL*16 A(10),B(10,10) などのようにバイト数を明示指定すればいい。Fortranのメインターゲットの大規模数値演算のときにバイト長というか有効数値範囲を知らないままで計算するというのはありえないです。 Cは型の弱い言語(型に厳密でない)なので、バイナリ入出力の変数の読み書きにバイト数の指定が必要ですが、型の強い言語だと、変数名さえ書けば長さはコンパイラが知っています。 もちろん他システムとバイナリデータの交換をする時はデータのバイト長を取り決めてそのバイト長で入出力する必要はあります。そういう時は上記のようにバイト長を明示して宣言します。
その他の回答 (2)
- ultraCS
- ベストアンサー率44% (3956/8947)
残念ながら、fortran単体では出来ないと思いますね。 オーソドックスなfortranは全てアドレス渡しで、equivalenceやレーベルコモンでトリッキーなことをしない限り、sizeof(関数ではなく、演算子です)が必要になることはないからです。 また、システム記述をするための言語ではないので、ポインタをユーザーが操作するようにはなっていないのが大きいと思います。構造体や共用体を明示的に使うことも出来ない(トリッキーにすることは出来る)し。 sizeof自体、私が使っていた(経験30年、FORTRANで言語処理系を書いたこともある)中では、一度も必要に思ったことはありません。 何をしたいのか書いていただければ、もう少しアドバイスできるかと思います。
補足
ありがとうございます。 Cであれば同じint型でも処理系によってバイト数が異なるので、Fortranでも同様に処理系に依存すると思っておりました。 そもそもFortranではintegerといえば4バイトと決まっているのでしょうか? Cのsizeof関数は、fread、fwriteで書き込むときに、型のサイズを知るために使われないですか? 例えば、fread(&i,sizseof(int),n,fp)のようにです。
- notnot
- ベストアンサー率47% (4900/10359)
基本型についてはバイト数をプログラム上で調べることは出来ないと思います。 主として数値計算に使われるので、基本型のバイト数は知っている、もしくは指定するという考え方なんだと思います。 配列の大きさ(要素数)は、size関数でわかりますが、一つの要素のバイト数がわからなければ全体のバイト数はわかりません。要素の型のバイト数を知っていれば掛け算で求まりますが。
お礼
ありがとうございます。 元々バイト数は既知という前提の言語なのですね。
補足
お返事ありがとうございます。 Cからプログラミングに入っていたので、型宣言は処理系依存であいまいなものだと思っておりました。 バイト長を明示すればよいということで納得できました。ありがとうございました。