2013-11-28 18 views
6

Fortran 2003標準に準拠しようとしている小さなスニペットを記述しました。コードはavailable on githubです。Fortran 2003ソースファイルの正しい接尾辞 - Intel Fortranコンパイラ

これが私のメイクです:

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 

上記のコードは、メイクファイルとのgfortranを使用して問題なくコンパイルされます。

しかし、私はちょうど

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

を使用して、のifortでコンパイルしようとした場合、それは動作しません、以下の出力を参照してください。これは.f03フリーファイル形式と関係があると思います。 gfortranの-std = f2003フラグに似たiFortにフラグがありますか?私はこれを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

私はintelのfortranコンパイラを使用していません、そして、この問題はありますか? 1つのコンパイラの規則をとり、それらを言語仕様として扱うことは疑問に思えます。 –

+0

'.f'接尾辞を使わないのはなぜですか?私がこれをするときには、すべての行の前に7つのスペースを入れる必要があることに注意してください。接尾辞はコンパイラにどの機能がオンになるかを伝えます。これは '.f08'接尾辞のかなり良い引数です。 –

+0

重要な点は、すべてのコンパイラが.f90をサポートしていることです。 f90はFortran 90ではなく、フリーソース形式です。私は人々が今f15ファイルを持って来ないことを願っています... –

4

-freeおよび-fixed ifortコマンドラインオプションを使用して、ソースファイルで使用されるソース形式を自由形式と固定形式でそれぞれ指定できます。

別の問題として、-stand [:xxx]オプションを使用して診断を発行するように標準を設定できます。これは、コンパイラによって生成されたコードを変更するものではなく、コンパイラが発行する診断を変更するだけです。これは、gfortranの-std = xxxオプションと同じです。

別の別の問題として、コンパイラが-standard-semanticsコンパイラオプションを使用してFortran標準を使用して指定されたものと一致するようにコンパイラの動作を変更するように指定できます。これは、コンパイラの動作が歴史的にFortran標準が要求または推奨したものと異なるシナリオをカバーしています。

コメントとVladimirの答えで推奨されているように、最も簡単なオプションは、フリーフォームソースファイル(-fixedコマンドラインオプションがないと、ifortによってフリーフォームソースとして扱われます)それが書かれている標準にかかわらず。