这就是我想要做的:
//Let Bin2Float be a magic macro that packages specified bit pattern into float as a constant
const float MyInf = Bin2Float(01111111,10000000,00000000,00000000);
我们都知道如何将位模式打包成整数(“二进制常量”hacks),这个神奇原型宏的输入与对应的 32 位整数二进制常量宏的输入相同。将这些位打包成整数常量不是问题。但是,在使用指针和联合双关语之后,我意识到将整数类型双关语转换为浮点数会导致许多问题(一些在 MSVC 方面,一些在 gcc 方面)。所以这里是要求列表:
- 必须在 gcc(C 模式)、g++、MSVC 下编译(即使我必须使用条件编译来做两个单独的版本)
- 必须为 C 和 C++ 编译
- 在生成的汇编代码中,必须编译成硬编码常量,而不是动态计算
- 不得使用 memcpy
- 不得使用静态或全局变量
- 不得使用基于指针的类型双关语以避免严格别名问题