プログラマのつれづれなるままにプログラマのつれづれなるままに音宮志久が思ったことなどをネタにします。プログラムネタ・数学ネタがメインです。64bitコードへの移植心構え64bitコードへの移植心構えコメントを残すさて、今更何でこの話題なのかといいますと、さすがに見つかったゆがみの量がとんでもないレベルになりつつあるからですが・・・。いっても64bitでコード生成したときに実行できない、というものではなく単純に「警告が出るからちょっといやだな~」と「ほかのところで整数型のサイズを合わせ始めるとほかのところで見つかるサイズの異なるポイントでいろいろと怒りたくなる」というものだったりします。*など)は問題は絶対に出ません。これは当たり前ですね。そりゃそれぞれの変数型のサイズはそのコードに依存するようになっているはずですからね。WinAPI系のHANDLE系の変数(HMODULE,HINSTANCE,HWND,HDC,...)もポインタの一種と考えていいですのでこの定義に当てはまります。ポインタを整数型にキャストする整数型にキャストするときはポインタと同じビット長となる変数型を使用する必要があります。これに関しては予約語のレベルでは用意されていないのでライブラリ側から貸してもらう必要があります。通常のCライブラリで用意されている型は次の通りです。これはlinuxなどでも標準でありますので互換性を重視するときはこちらを使用します。使うには適当なCライブラリのヘッダーファイル(stdlib.hやstddef.hなど)をインクルードすれば使用できます。WinAPI系であればこの形式がよく出てきますね。ロング値[ポインタ系値]を主に受け付けるこの変数型を使用する限りはキャストを行ってもポインタを正常に受け付けれれます。ちなみに、古いMSDNなんかでint型を使用しているのに新しいMSDNではINT_PTR型になっている関数とかがありますので気をつけましょう~~~ポインタのサイズを扱うメモリを確保するときのサイズを指定したり、ポインタ同士の差をとってメモリサイズを取得するときなどに使うコードの動作です。ポインタのサイズを扱う変数型はライブラリによって微妙に扱い方が違いますので気をつけましょう。通常のCライブラリでは次の型を使うことが多いです。ftellやfseekなどが使用する最後のものはファイル系の処理(fseekやftellなど)でちょっと処理が違うのでWindows(VC++)からLinux(GCCなど)への移植時には気をつける必要があります。これがWinAPI系になるとよくわからない状態になります。waveOutOpenなどが使用する・・・どれかに統一してくれません?といいたくなりますがこれが事実ですね。DWORDx2で64bitを無理矢理扱ったりしているやつもいますが。(GetFileSizeなど。これはULARGE_INTEGERを使用してカバーできる)さすがに常時64bit変数を使うと32bit環境で速度が大幅に落ちるので通常はsize_tをデフォルトにして必要に応じて各変数型へのキャストで対応する、がいいと思います。構造体内部での変数型メモリ上だけで扱われる構造体なら変数のサイズなんてどうなったっていいです。同じコンパイラで同じ設定を使う限りは全部吸収してくれます。問題となるのはファイルに書き出したデータを読み出すときです。構造体のアライメント問題で変数の位置がずれたりすることもあります。pack(pop)など)をそれぞれで使いやすいものを選んで使うといいと思います。32bitコード(特にWinAPI系)からの移植でのちょっとしたポイントで、ここで問題になるのは32bitでプログラムを作っているとき、大半の人はDWORDをサイズ型として扱っているのではないでしょうか?特にファイル処理やモジュール処理ではDWORDが頻繁に登場するので統一するならこれを使う、というわかりやすい選択だと思います。ここをうまいこと処理することでそれほど問題なく移植ができると思います。必要だと思った場所をsize_tに変更してそれ以外はDWORDで放置しておくとうまいこといけると思います。書き換え作業でイラっと来たので気分転換のための記事でした。いいですが、CTUって標準ではPPPoEをルーターから通過させないような設定になっているんですね・・・。勉強になりました・・・。longおよびポインタが64bit値となるコンパイラ。intやlongは32bit値となる。longおよびポインタが64bit値となるコンパイラ。intが32bit値となる。コメントをキャンセルメールアドレスが公開されることはありません。気になるプログラムネタや数学ネタがあったら書き込みたいのだが残業が長すぎて眠気が全くとれず体調があまりよくない。過労などでぶっ倒れるかもしれない。あと、さすがに独り身が寂しいのでなんとかしたいと考えてはいるのだが...。アクセスカウンタアクセス数:スポンサーリンクモバイルバージョンに。