これが私がやろうとしていることです:
//Let Bin2Float be a magic macro that packages specified bit pattern into float as a constant
const float MyInf = Bin2Float(01111111,10000000,00000000,00000000);
ビットパターンを整数にパッケージ化する方法(「バイナリ定数」ハック)は誰もが知っています。この魔法のプロトタイプマクロへの入力は、対応する32ビット整数のバイナリ定数マクロの場合と同じです。ビットを整数定数にパッケージ化することは問題ではありません。しかし、ポインターと共用体のしゃれで遊んだ後、整数をfloatに型のパンニングすると、多くの問題が発生することに気付きました(MSVC側、gcc側)。したがって、要件のリストは次のとおりです。
- gcc(Cモード)、g ++、MSVCでコンパイルする必要があります(2つの別々のバージョンを実行するために条件付きコンパイルを使用する必要がある場合でも)
- CとC++の両方でコンパイルする必要があります
- 結果のアセンブリコードでは、動的に計算されるのではなく、ハードコードされた定数にコンパイルする必要があります
- memcpyを使用してはいけません
- 静的変数またはグローバル変数を使用してはなりません
- 厳密なエイリアシングの問題を回避するために、ポインタベースの型のパンニングを使用しないでください