#ifdef DOUBLE_PRECISION_COMPUTE
#define MAKE_PRECISE(N) ...
#endif
// if not defined, leave as it is. MAKE_PRECISE(N) (N)
上面的宏(取代" ......"右边的redifiniton)可以进行以下操作吗?
double PI=MAKE_PRECISE(3.14159265359f);
变为
double PI=3.14159265359;
double area= MAKE_PRECISE(3.14159265359f)*r*r;
变为
double area= 3.14159265359*r*r;
答案 0 :(得分:6)
没有
无法使用预处理程序指令转换令牌。
相反,请删除源代码中的f
来更正文字。
无论如何,结果将比在一些MAKE_PRECISE
宏中包装所有内容更容易阅读,但不清楚发生了什么。
答案 1 :(得分:2)
如上所述,您无法删除f
,但您可以有条件地添加它:
#ifdef DOUBLE_PRECISION_COMPUTE
# define MAKE_PRECISE(N) (N)
#else
# define MAKE_PRECISE(N) (N##f)
#endif
将转向:
double area = MAKE_PRECISE(3.14159265359)*r*r;
进入:
double area = (3.14159265359)*r*r; // with DOUBLE_PRECISION_COMPUTE defined
或
double area = (3.14159265359f)*r*r; // with DOUBLE_PRECISION_COMPUTE UNdefined