宏中的双重科学记数法

double scientific notation in macro

我想知道我是否可以创建使用自定义 "shift"(或其他在编译时创建它的方式)创建值的宏。我的意思是,连接两个数字或其他东西...

类似的东西(当然不行):

#define CUSTOM_DOUBLE(shift) 1.05E shift

我知道我能做到:

#define CUSTOM_DOUBLE(shift) 1.05 * pow(10.0, shift)

但我知道它不是在编译时计算的。

你想要这个:

#define CUSTOM_DOUBLE(shift) 1.05E##shift

##concatenation operator.

只要 shift 参数作为 整数常量(十进制形式)传递,这可以通过 ## 运算符来完成,它连接预处理标记.例如,它可以实现为:

#include <stdio.h>

#define CUSTOM_DOUBLE(shift) (1.05E ## shift)

int main(void)
{
    double d = CUSTOM_DOUBLE(3);

    printf("%E\n", d);
    return 0;
}