ifort的实际大小标志等效于C

时间:2014-06-10 06:03:53

标签: c fortran intel-fortran compiler-flags

gcccl是否具有ifort real-size编译器标志的等效标识?如果没有,我应该用什么呢? MACRO?

#ifdef DOUBLE_PRECISION
  #define REAL double
#else
  #define REAL float
#endif
REAL myvar;

2 个答案:

答案 0 :(得分:1)

gfortran有编译时选项-fdefault-real-8。但不是gcc。

答案 1 :(得分:0)

据我所知,没有“通用浮点数”,其大小可以通过编译器开关控制。我们使用与您类似的方法,虽然使用的是typedef而不是define

#ifdef DOUBLE_PRECISION
    typedef double real;
#else
    typedef float real;
#endif

然而,它不仅仅是浮点类型。例如,请考虑以下函数签名:

double exp(double x);
float expf(float x);
long double expl(long double x);

每个函数都有一个后缀,表示参数类型和返回值。或者考虑浮点文字的类型:

1.2f   // float
1.2    // double

如果你想要安全起见,你也必须为这些案例编写宏:

#ifdef DOUBLE_PRECISION
    #define REAL(x) x
    #define SIN(x) sin(x)
#else
    #define REAL(x) x ## f
    #define SIN(x) sinf(x)
#endif

在实践中,我发现在开启优化(-O2或更多)的情况下,编译器可以找出最好的函数签名以及用于文字的类型,所以我只使用简单的函数和文字。为了不弄乱代码。这似乎适用于gcc以及Intel和PGI编译器。