C++可以定义宏重写浮点文字作为双文字或至少删除F后缀吗?

C++可以定义宏重写浮点文字作为双文字或至少删除F后缀吗?,c++,macros,C++,Macros,可以替换上面的宏。。。使用正确的重新定义,是否执行以下操作 #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_PRECI

可以替换上面的宏。。。使用正确的重新定义,是否执行以下操作

#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 PI=MAKE_PRECISE(3.14159265359f);
double PI=3.14159265359;

double area= MAKE_PRECISE(3.14159265359f)*r*r;
没有

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

相反,通过删除源代码中的f来更正文本


无论如何,结果将比将所有内容包装在一些不清楚发生了什么的MAKE_-precision宏中要容易得多。

如前所述,不能去除f,但可以有条件地添加它:

double area= 3.14159265359*r*r;
这将转变为:

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


你有C++14可用吗?是的,使_加倍和增加_精度应该是相同的符号吗?只是编了这些名称,是的,是相同的意图。经过编辑,现在所有的都是成双的。我需要在和处去掉f。不,我还没有可用的C++14,但我可以稍后再试。现在我使用的是C++11static constexpr auto PI=3.14159265358979323846264338327950288,我想应该可以工作吧??苹果在Objective-C中将其定义为define M_PI 3.14159265358979323846264338327950288。您有什么特殊原因需要将其作为浮点前缀吗?我想我想知道“精确”的意义是什么。编辑,现在都是“加倍”。除了,不,他们不是;它们都很精确。你对细节的关注是不可见的。预处理器的标记粘贴操作符很方便