2014-06-10 3 views
0

에 해당 gccclifortreal-size 컴파일러 플래그에 해당하는 내용입니까? 그렇지 않다면 대신 무엇을 사용해야합니까? MACRO?ifort의 실제 크기 플래그

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

답변

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 컴파일러에서 작동하는 것으로 보입니다.

1

gfortran의 컴파일 시간 옵션은 -fdefault-real-8입니다. 그러나 gcc가 아닙니다.

+0

감사합니다. 질문에서 분명히 명확하지는 않지만 Fortran 코드가 아닌 C 코드를 컴파일하려고합니다. – Peter