宏观上的双重科学记数法

时间:2015-08-15 19:20:21

标签: c macros double notation

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

类似的东西(当然它不起作用):

#define CUSTOM_DOUBLE(shift) 1.05E shift

我知道我能做到:

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

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

2 个答案:

答案 0 :(得分:2)

只要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;
}

答案 1 :(得分:1)

你想要这个:

#define CUSTOM_DOUBLE(shift) 1.05E##shift

##concatenation operator