【问题标题】:ifort's real-size flag equivalent for Cifort 的 C 的实际大小标志等价物
【发布时间】:2014-06-10 06:03:53
【问题描述】:

gcccl 是否有等效于 ifort real-size 编译器标志?如果没有,我应该改用什么?宏?

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

【问题讨论】:

    标签: c fortran intel-fortran compiler-flags


    【解决方案1】:

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

    【讨论】:

    • 谢谢,也许问题不是很清楚,但我想编译C代码,而不是Fortran代码。
    【解决方案2】:

    据我所知,没有可以通过编译器开关控制大小的“通用浮点数”。我们使用与您类似的方法,尽管使用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 编译器。

    【讨论】:

      猜你喜欢
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 2022-08-24
      • 2011-11-23
      • 1970-01-01
      • 2011-04-02
      相关资源
      最近更新 更多