C++是否可以将宏重写浮点文本为双文本或至少删除 f 后缀?


#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;

No.

无法使用预处理器指令转换令牌。

相反,请通过删除源代码中的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

最新更新