ifort 的 C 的实际大小标志等价物
Posted
技术标签:
【中文标题】ifort 的 C 的实际大小标志等价物【英文标题】:ifort's real-size flag equivalent for C 【发布时间】:2014-06-10 06:03:53 【问题描述】:gcc
和 cl
是否有等效于 ifort
real-size 编译器标志?如果没有,我应该改用什么?宏?
#ifdef DOUBLE_PRECISION
#define REAL double
#else
#define REAL float
#endif
REAL myvar;
【问题讨论】:
【参考方案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 编译器。
【讨论】:
以上是关于ifort 的 C 的实际大小标志等价物的主要内容,如果未能解决你的问题,请参考以下文章
ifort 中的标志 -r8 会影响声明为 real*4 的变量吗?