에 해당 gcc
과 cl
은 ifort
real-size 컴파일러 플래그에 해당하는 내용입니까? 그렇지 않다면 대신 무엇을 사용해야합니까? MACRO?ifort의 실제 크기 플래그
#ifdef DOUBLE_PRECISION
#define REAL double
#else
#define REAL float
#endif
REAL myvar;
에 해당 gcc
과 cl
은 ifort
real-size 컴파일러 플래그에 해당하는 내용입니까? 그렇지 않다면 대신 무엇을 사용해야합니까? MACRO?ifort의 실제 크기 플래그
#ifdef DOUBLE_PRECISION
#define REAL double
#else
#define REAL float
#endif
REAL myvar;
내가 아는 한 컴파일러 스위치로 크기를 제어 할 수있는 "범용 플로트"가 없습니다. 우리는 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 컴파일러에서 작동하는 것으로 보입니다.
gfortran의 컴파일 시간 옵션은 -fdefault-real-8
입니다. 그러나 gcc가 아닙니다.
감사합니다. 질문에서 분명히 명확하지는 않지만 Fortran 코드가 아닌 C 코드를 컴파일하려고합니다. – Peter