2013-11-28 48 views
6

我寫了一小段代碼,嘗試遵守Fortran 2003標準。代碼是available on githubFortran 2003源文件的正確後綴 - 英特爾Fortran編譯器

這是我的makefile:

FC = gfortran 
FLGS = -g -pg -std=f2003 -I. -fbounds-check 
DEPS = camx.prm 
OBJ = unit-test-hadvppm.o hadvppm.o 

#linker macro 
%.o: %.f03 $(DEPS) 
     $(FC) -c -o [email protected] $< $(FLGS) 

#build targets 

gnu-amd64-linux: $(OBJ) 
     $(FC) -o [email protected] $^ $(FLGS) 

clean: gnu-amd64-linux 
     rm *.o 

代碼編譯而不使用上面的makefile文件和gfortran問題。

不過,如果我嘗試用iFort編譯它,只用

ifort -o ifort-amd64-linux unit-test-hadvppm.f03 hadvppm.f03 

它不工作,請參見下面的輸出。我想這與免費的.f03文件格式有關。 iFort中是否有與gfortran的-std = f2003標誌類似的標誌?我試圖在iFort文檔中找到它,我應該更難看嗎?

enter image description here

+3

爲什麼不簡單地將文件重命名爲'* .f90'或'* .F90'?文件結尾應該獨立於標準;-)我主要在Fortran 2003/2008中編碼,並且*總是*使用'* .F90' - 幾年前,當使用'* .F03'時,我遇到了一些編譯器問題,消失了重命名文件後。 –

+0

@AlexanderVogt謝謝,我會嘗試! – seb

+2

可能值得注意的是,一些針對Linux的編譯器(包括ifort)默認將'.F90'擴展名解釋爲要傳遞給預處理器的文件。當然,僅僅使用大寫擴展還是兩者都是風格問題。 – sigma

回答

12

中沒有任何一個指定的文件後綴的標準。英特爾總是表示,他們將*.f90視爲免費源格式的後綴,而不考慮標準版本。這只是一個不基於任何標準文件的慣例。

也許f90後綴是一點不幸,看起來就像Fortran 90,但您應該毫不猶豫地將它用於每個自由格式的源文件。

就我個人而言,我也不喜歡.f95,.f03, .f08文件的做法。我應該重新命名源文件嗎?僅僅是因爲我從一個新標準中調用了一些內在的東西?

+0

如果沒有標準和我不使用英特爾的fortran編譯器,那麼這是否重要?採用一種編譯器的約定似乎值得懷疑,並將它們視爲語言規範。 –

+0

爲什麼不使用'.f'後綴?請注意,當我這樣做時,它需要我在每行前面都有7個空格,所以後綴似乎告訴編譯器要打開哪些功能,這對'.f08'後綴來說是一個很好的參數。 –

+0

關鍵是所有編譯器都支持.f90,爲什麼還要使用其他的東西? f90不是Fortran 90,它是免費的源代碼格式。我希望人們現在不會使用f15文件... –

4

您可以分別使用-free和-fixed ifort命令行選項指定源文件中使用的源表單,分別爲免費和固定格式。

作爲一個單獨的問題,您可以將標準設置爲針對使用-stand [:xxx]選項發出診斷。這不會更改編譯器生成的代碼,它只會更改編譯器發佈的診斷信息。這相當於gfortran的-std = xxx選項。

作爲另一個單獨的問題,您可以指定編譯器應該使用-standard-semantics編譯器選項更改其行爲以匹配使用Fortran標準指定的行爲。這涵蓋了編譯器歷史上的行爲與Fortran標準要​​求或推薦的行爲不同的情況。

正如評論和弗拉基米爾的回答中所建議的 - 最簡單的選擇是對任何自由格式的源文件使用.f90(在缺少固定命令行選項的情況下,它將被ifort視爲自由格式源) ,而不管它已經寫入的標準。

相關問題