C++ 能否定义宏将浮点文字重写为双精度文字或至少删除 f 后缀?
Can a C++ define macro rewrite a float literal as a double literal or at least drop the f postfix?
#ifdef DOUBLE_PRECISION_COMPUTE
#define MAKE_PRECISE(N) ...
#endif
// if not defined, leave as it is. MAKE_PRECISE(N) (N)
上面的宏(将“...”替换为正确的重新定义)可以执行以下操作吗?
double PI=MAKE_PRECISE(3.14159265359f);
变成
double PI=3.14159265359;
double area= MAKE_PRECISE(3.14159265359f)*r*r;
变成
double area= 3.14159265359*r*r;
没有
无法使用预处理器指令转换标记。
相反,通过删除源代码中的 f
来更正文字。
结果无论如何比将所有内容都包装在一些不清楚发生了什么的MAKE_PRECISE
宏中要容易得多。
如前所述,您不能删除 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
#ifdef DOUBLE_PRECISION_COMPUTE
#define MAKE_PRECISE(N) ...
#endif
// if not defined, leave as it is. MAKE_PRECISE(N) (N)
上面的宏(将“...”替换为正确的重新定义)可以执行以下操作吗?
double PI=MAKE_PRECISE(3.14159265359f);
变成
double PI=3.14159265359;
double area= MAKE_PRECISE(3.14159265359f)*r*r;
变成
double area= 3.14159265359*r*r;
没有
无法使用预处理器指令转换标记。
相反,通过删除源代码中的 f
来更正文字。
结果无论如何比将所有内容都包装在一些不清楚发生了什么的MAKE_PRECISE
宏中要容易得多。
如前所述,您不能删除 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