2010-03-25 70 views
4

我正在使用Fortran代碼,它必須與各種Fortran編譯器一起工作(並且與C++和Java代碼進行交互)。目前,我們使用gfortran和g95,但我正在研究如何使用ifort來處理它,而我遇到的第一個問題是如何確定在源代碼中是使用ifort還是使用ifort不。從其他fortran編譯器中區分ifort的宏是什麼?

例如,我現在有這段代碼:

#if defined(__GFORTRAN__) 
// Macro to add name-mangling bits to fortran symbols. Currently for gfortran only 
#define MODFUNCNAME(mod,fname) __ ## mod ## _MOD_ ## fname 
#else 
// Macro to add name-mangling bits to fortran symbols. Currently for g95 only 
#define MODFUNCNAME(mod,fname) mod ## _MP_ ## fname 
#endif // if __GFORTRAN__ 

什麼是對ifort宏?我試過IFORT,但那是不正確的,而且進一步猜測似乎並不富有成效。我也嘗試閱讀手冊頁,使用ifort -help和Google。

+2

我知道我對這個問題已經很晚了,但我只是想提一下關於樣式的快速註釋:'#if defined'子句中的默認情況應該是一個錯誤,以防止出現意外行爲。所以儘量使用'#if defined(__ GFORTRAN__)... #elif defined(__ INTEL_COMPILER)... #else ... #error「編譯器沒有設置名稱宏。」# – Chris 2012-02-19 15:10:24

+0

@Chris:very好點 – 2012-02-19 21:33:50

回答

2

定義根據他們的文檔,它們定義__INTEL_COMPILER = 910。 910可能是一個版本號,但你可能只需#ifdef就可以了。

我應該注意,ifort不允許使用宏,除非你明確地用/ fpp標誌打開它。

+0

是的,它是一個版本ID。對於ifort版本11.1,其值爲1110.您還可以通過使用文件類型「F90」(大寫)來獲得宏/預處理。 – 2010-03-25 22:44:06

+0

「filetype」是指文件的擴展名,還是你在說編譯器標誌? – 2010-03-26 13:33:05