簡単な答えでは、f95以下の標準をgnuコンパイラと区別することはできません。 f95以降では、-stdオプションを使用してコンパイラに上記の標準の機能をエラーとして認識させることができます。
長い答え:
-std = STD 'のf95' の一つとすることができるプログラムが従うべき基準を、指定し、「F2003:
documentation of gnu compilerは、この言います'、' f2008 '、' gnu '、' legacy 'のいずれかです。 stdのデフォルト値は 'gnu'で、 GNU Fortranでサポートされているすべての拡張を含む Fortran 95標準のスーパーセットを指定しますが、新しいコードでの使用は推奨されていません。 'legacy'の値は と同等ですが、古い拡張機能に関する警告は表示されず、古い非標準プログラムの場合は と便利です。 'f95'、 'f2003'および 'f2008'の値 は、それぞれFortran 95、Fortran 2003およびFortran 2008標準に厳密に準拠しています。すべての拡張子 に該当する言語標準を超えてエラーが表示され、後で 規格で許可され廃止された Fortran 77の機能に対して警告が表示されます。 '-std = f2008ts'は、 にさらに の技術仕様(TS)29113の追加を含むFortran 2008標準と、FortranのCとの相互運用性と追加の並列の のTS 18508の機能をFortranでサポートします。
- `-std=f95` will consider features above f95 as errors
- `-std=f2003` will consider features above f2003 as errors
- `-std=f2008` will consider features above f2008 as errors
- etc.
あなたは他のコンパイラに確認することをお勧めします。
簡単確認:オプション-std=f95
の有無にかかわらず、次のプログラム(Fortran wiki)をコンパイルし、何が起こるかを確認してください。
module class_Circle
implicit none
private
real :: pi = 3.1415926535897931d0 ! Class-wide private constant
type, public :: Circle
real :: radius
contains
procedure :: area => circle_area
procedure :: print => circle_print
end type Circle
contains
function circle_area(this) result(area)
class(Circle), intent(in) :: this
real :: area
area = pi * this%radius**2
end function circle_area
subroutine circle_print(this)
class(Circle), intent(in) :: this
real :: area
area = this%area() ! Call the type-bound function
print *, 'Circle: r = ', this%radius, ' area = ', area
end subroutine circle_print
end module class_Circle
program circle_test
use class_Circle
implicit none
type(Circle) :: c ! Declare a variable of type Circle.
c = Circle(1.5) ! Use the implicit constructor, radius = 1.5.
call c%print ! Call the type-bound subroutine
end program circle_test
あなたが混乱していると思うことの1つは、.f vs .f90ファイルの意味です。ファイル拡張子は、フリーフォームまたは固定フォームの書式設定にのみ関連しています。 gfortran main.fと入力しても、F77コンパイラを使用しているわけではありません。 – Ross
@Ross:私は自由形式/固定形式とファイルの拡張を認識していますが、 'gfortran main.f 'とタイプするとFortran 77コードがコンパイルされると思いました。コンパイラが実際にコンパイルするFortran(77,90など..)の種類と標準との関係の違いを理解するのは難しいです。 – Coriolis
古いレガシーコンパイラと互換性がある必要がある場合は、最も確実なチェックはコンパイラで確認することです。それ以外の場合は、古い標準とのコンプライアンスを維持することになぜ気がかかるのでしょうか。 – agentp