我希望能够在我的预处理器宏中执行此操作
#define dble double
/* Just something that converts x to a double precision float.
static_cast used as an illustration: */
#define dble(x) static_cast<double>(x)
我知道 C 标准预处理器不允许重载。我也知道可变参数
#define dble(...)
至少需要一个参数,并且不允许省略括号。即使有这样的洞察力,我也不能放弃它必须是解决这个问题的一种方法的感觉。有没有人有任何聪明的想法如何做到这一点?
使用示例:
dble x;
x = dble(3);
背景:我实际上对将 C 预处理器用于我的 Fortran 代码很感兴趣。我想为变量声明开发一个简化的符号。对于独立应用程序,DBLE 将扩展到 DOUBLE PRECISION,如果我正在为具有 C 接口的库进行 C 互操作性编译,则 DBLE 将扩展到 REAL(C_DOUBLE)。但是,DBLE 在 Fortran 中是所谓的 INTRINSIC。DBLE(3) 将 3 转换为双精度浮点数。在独立模式下,它将是 3.0d0。在 C 互操作模式下,它将被转换为 3.0_C_DOUBLE。