c++预处理器处理浮点数学常量吗

q5lcpyga  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(110)

说我有

#define A 23.9318;
   #define B 0.330043;
   #define C 5.220628;

字符串
我想做

const unsigned result =  (unsigned)(0x01000000 * ( A * B / C ));    // unsigned is 32 bit


我所希望的是得到浮点计算的固定小数表示的结果。
我不能预先合并A,B,C在一起,因为他们的定义不是我的代码的一部分,我需要它的工作,如果他们被改变。

xjreopfe

xjreopfe1#

不可以,标准的C预处理器操作不执行浮点运算。
C标准允许但不要求C实现在编译时执行这些操作。

c6ubokkw

c6ubokkw2#

下面的例子说明了虽然不是必需的,但一些C实现确实包含了浮点数的编译时计算。
下面的代码是使用C99实现编译的,并产生了指定的结果(注解值为main()

#include <ansi_c.h>

#define A 23.9318
#define B 0.330043
#define C 5.220628

#define result A*B/C  //1.512945007267325

const unsigned resultB = (unsigned)result*(0x01000000);

int main(void)
{
    resultB; //24394701
    
    return 0;
}

字符串

相关问题