windowsformsでプログラムを作って、ファイルを書き出し!
そんで読み込み部分作ったらなぜかバグった・・
見てみたら、sizeofでbool型で定義した変数が1で返ってきて
オフセットがずれていた。
書き込み時は4で返るのに、読み込みだけ1で返ってくる。
なんじゃこりゃーー、調べたがよくわからない。
しかし小文字boolに関してはあまり信用されていないことだけはわかった。
大文字BOOLはIPhoneとか色んなとこでバッティングするから好きじゃないんだけどなぁ・・
boolの摩訶不思議
Re: boolの摩訶不思議
処理系によってはbool型は1になったり4になったり、マクロで別の型の名前に置き換えられたりとデータサイズが一定になりにくい基本型の一つです。
データを書きだす時など、データサイズが重要な処理ではBYTE(unsigned char)型等のデータサイズが確定している(もしくは固定だと確認した)型の変数に代入したうえで使用することを推奨します。
bool 型によらず、32bit/64bit 間でもデータサイズが変化する型が存在するので、typedef 等で定義済みの型のデータサイズを余り鵜呑みにしてはいけません。
データを書きだす時など、データサイズが重要な処理ではBYTE(unsigned char)型等のデータサイズが確定している(もしくは固定だと確認した)型の変数に代入したうえで使用することを推奨します。
bool 型によらず、32bit/64bit 間でもデータサイズが変化する型が存在するので、typedef 等で定義済みの型のデータサイズを余り鵜呑みにしてはいけません。
Re: boolの摩訶不思議
ほほー、処理系で型が変わるものがあるなんて初耳ですね・・勉強になります。
詳しいご説明ありがとうございます。
詳しいご説明ありがとうございます。
Re: boolの摩訶不思議
規格上はchar以外すべてデータサイズが決まってないです。
sizeof(char)が1だというだけでビット数が決まってないですし。
ビット幅が重要なデータの場合は、stdint.hで定義されるint8_tとかの型を使うのが良いと思います。
sizeof(char)が1だというだけでビット数が決まってないですし。
ビット幅が重要なデータの場合は、stdint.hで定義されるint8_tとかの型を使うのが良いと思います。
Re: boolの摩訶不思議
ありがとうございます、色々調べてint8_tやらint64_やらの重要性がわかったきがしました。
個人的にはIPhoneとかにうつすとコンパイル通らないので嫌っていたふしがあるのですが見直そうと思います。
しかし驚愕の事実すぎて、今まで作ってきたやつが、同じようにオフセット管理してただけにバグらないかどうか不安だ・・
個人的にはIPhoneとかにうつすとコンパイル通らないので嫌っていたふしがあるのですが見直そうと思います。
しかし驚愕の事実すぎて、今まで作ってきたやつが、同じようにオフセット管理してただけにバグらないかどうか不安だ・・