1

wxWidgets を使用する C++ アプリがあります。アプリの特定の部分は、32 ビット ホストと 64 ビット ホストでは異なります。現在 sizeof(void *) を使用していますが、条件付きコンパイルを使用し、プラットフォームに依存しないより良い方法はありますか?

4

4 に答える 4

3

通常、人々は #defines を使用してビット数を決定します (正確な定義はコンパイラによって異なります)。これは、sizeof(void*) を使用したランタイム アプローチよりも優れています。

プラットフォーム ニュートラルに関しては、一部のコンパイラは複数のプラットフォーム上にあります..

于 2009-12-27T18:04:37.473 に答える
2

コンパイラによっては、プラットフォーム固有のマクロにアクセスできる場合があります。ドキュメントを調べてみてください。

于 2009-12-27T18:05:05.270 に答える
1

すべての一般的なコンパイラには、プラットフォームを識別する定義済みのプリプロセッサ マクロがあります。たとえば、GCC を使用している場合は、すべてを簡単に確認できます。

touch foo.h; g++ -E -dM foo.h

とりわけ得られるもの

#define linux 1
#define __x86_64 1

私にとっては、現在64b Linuxを使用しているため、

#define __APPLE__ 1
#define __i386 1

32b OS X だと聞きました。

Sun Studio 12 については、ここに記載されています。また、Sun Microsystems はそれらをコンパイラの API の一部と見なしているため、互換性が保証されています。たとえば、私の Solaris ボックスでは__SunOS_5_10__sparcv9定義済み (64b を意味します) があります。

IBM xlc コンパイラーを備えた AIX システムでは、/etc/vac.cfgとそのoptionsキーワード フィールドを調べて、事前定義されたマクロを見つけてください。私がアクセスできるシステムには、(64b PPC で) 定義されているものと同様に、少なくとも_AIXより具体的なものがあります。_AIX61_POWER

HP-UX とその aCC コンパイラには、少なくとも__ia64itanium のマクロがあります。その他の aCC 固有の定義済みマクロについては、こちらに記載されています。

于 2009-12-27T19:47:35.127 に答える
0

sizeof()サイズが重要な場所で使用することの何が問題になっていますか? コンパイラは喜んでそれを定数に最適化します。

于 2009-12-27T21:39:51.347 に答える