gooドクター有料プランが1ヶ月間無料!

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

gooドクター

A 回答 (3件)

#1です。


バイト数を気にするなら変数宣言の時に、
INTEGER*8 N,K
INTEGER*4 I
REAL*16 A(10),B(10,10)
などのようにバイト数を明示指定すればいい。Fortranのメインターゲットの大規模数値演算のときにバイト長というか有効数値範囲を知らないままで計算するというのはありえないです。

Cは型の弱い言語(型に厳密でない)なので、バイナリ入出力の変数の読み書きにバイト数の指定が必要ですが、型の強い言語だと、変数名さえ書けば長さはコンパイラが知っています。

もちろん他システムとバイナリデータの交換をする時はデータのバイト長を取り決めてそのバイト長で入出力する必要はあります。そういう時は上記のようにバイト長を明示して宣言します。

この回答への補足

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

補足日時:2006/01/24 13:13
    • good
    • 0

残念ながら、fortran単体では出来ないと思いますね。



オーソドックスなfortranは全てアドレス渡しで、equivalenceやレーベルコモンでトリッキーなことをしない限り、sizeof(関数ではなく、演算子です)が必要になることはないからです。


また、システム記述をするための言語ではないので、ポインタをユーザーが操作するようにはなっていないのが大きいと思います。構造体や共用体を明示的に使うことも出来ない(トリッキーにすることは出来る)し。
sizeof自体、私が使っていた(経験30年、FORTRANで言語処理系を書いたこともある)中では、一度も必要に思ったことはありません。

何をしたいのか書いていただければ、もう少しアドバイスできるかと思います。

この回答への補足

ありがとうございます。
Cであれば同じint型でも処理系によってバイト数が異なるので、Fortranでも同様に処理系に依存すると思っておりました。
そもそもFortranではintegerといえば4バイトと決まっているのでしょうか?

Cのsizeof関数は、fread、fwriteで書き込むときに、型のサイズを知るために使われないですか?
例えば、fread(&i,sizseof(int),n,fp)のようにです。

補足日時:2006/01/23 16:45
    • good
    • 0

基本型についてはバイト数をプログラム上で調べることは出来ないと思います。


主として数値計算に使われるので、基本型のバイト数は知っている、もしくは指定するという考え方なんだと思います。

配列の大きさ(要素数)は、size関数でわかりますが、一つの要素のバイト数がわからなければ全体のバイト数はわかりません。要素の型のバイト数を知っていれば掛け算で求まりますが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/23 16:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

gooドクター

人気Q&Aランキング