宏中的双重科学记数法
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;
}
我想知道我是否可以创建使用自定义 "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;
}