gfortran
    Top > Fortran > コンパイル
    はしがき
     基本的にmanコマンドの和訳・要約(自分が使うものが中心になると思う).  なんとなくの理解で使っていたり必要に応じて調べたりしていたが,さすがに面倒になってきたので一度自分でまとめることにした. とりあえずコピペ用. FFLAGS = -O0 -Wall -g -fcheck=array-temps,bounds,do,mem,pointer,recursion -ffpe-trap=invalid,zero,overflow,underflow
    概要
    GNU Fortran (GCC) 4.1.2 20080704 (Red Hat 4.1.2-55) Copyright (C) 2007 Free Software Foundation, Inc. gfortran [-c│-S│-E] [-g] [-pg] [-Olevel] [-Wwarn...] [-pedantic] [-Idir...] [-Ldir...] [-Dmacro[=defn]...] [-Umacro] [-foption...] [-mmachine-option...] [-o outfile] infile... gfortranはgccのオプションは全て対応している. オプションは以下に大別される. ・Fortran言語オプション (Fortran Language Options) ・警告オプション (Warning Options) ・デバッグオプション (Debugging Options) ・ディレクトリオプション (Directory Options) ・ランタイムオプション (Runtime Options) ・コード生成オプション (Code Generation Options)
    警告オプション(Warning Options)
    致命的ではないけどエラーを起こす可能性のあるものについて警告を出してくれる.コンパイルはされるが,警告が出たら基本的に修正したほうがいいと思う.特にモデルやライブラリ開発ではコンパイル時に出てくると煩わしいし格好悪いので. -fsyntax-only 構文チェックのみ行い,それ以上のことは何もしない. -pedantic Fortran95における拡張 -pedantic-errors 同上,ただし警告ではなくエラーを生成する. -w 全ての警告を無効にする(警告文を出さない). -Wall よく用いられる警告オプションを有効にする. -Wunused-labels, -Waliasing, -Wampersand, -Wsurprising, -Wnonstd-intrinsic及び-Wline-truncationが含まれる. -Waliasing 可能なエイリアシング エイリアシングというのは,「ある型のポインタを異なる型の変数でもアドレスすること」(Wikipedia),つまりここでは,手続きの異なる引数に同じ変数を与えており,それが構文としては有効な場合にこの警告が生成されるということらしい. /idx{-Wampersand} 文字列の改行で'&' (=ampersand)が抜けている gfortranでは'&'の後はコメント文と半角スペースを無視して文字列が続いているものとみなすので,両者はいずれも'hogefuga'を出力する. -Wconversion 暗黙の型変換 -Wimplicit-interface 明示的なinterface宣言が行われていない [Memo] 多分外部手続きの利用の話 -Wsurprising 意図して書かれたものか疑わしい構造 次の2つの場合を検出する (1) IntegerのSelect文で整数の示す範囲が(下限<上限)となっており存在しない (2) LogicalのSelect文でCaseが3つ存在する -Wunderflow 数値定数が表現可能な範囲の下限を下回った -Wunused-labels 用いられていない変数 -Werror  全ての警告をエラーと見なす -W  「追加の警告」を有効にする.  また最適化オプションが-Oのとき-Wuninitializedを有効化する. [Memo] 追加の警告("extra options")とは?
    デバッグオプション
    -fdump-parse-tree  構文木(parse tree)を出力する.gfortranそのもののデバッグにのみ有用. -ffpe-trap=<keyword> 浮動小数点例外(FPE; Floating Point Exception)が生じそうな場合についてIEEE例外を特定し,SIGFPEシグナルを送ってプログラムを停止する. 以下のキーワードをカンマ区切りで与える. "-ffpe-trap=invalid,zero,overflow,underflow"など. invalid sqrt(-1.0)などの不正な計算. zero ゼロによる除算. overflow 浮動小数点操作におけるオーバーフロー. underflow 浮動小数点操作におけるアンダーフロー. inexact 精度低下. denormal 非正規化数 (浮動小数点方式で表現できないくらい絶対値の小さい数). 最初の5つはIEEE 754例外に対応している.denormalはIEEE 754標準ではないが,いくつかのアーキテクチャー/w{(/wr{x_86}など)}では利用可能である. -fcheck=<keyword> ランタイムチェックを有効化する.引数は下記キーワードをカンマで区切ったリストとするのが望ましい. "-fcheck=array-temps,bounds,do,mem,pointer,recursion"など. array_temps 実引数の受け渡し時に一時配列が生成される場合に警告する. [Memo] 部分配列を引数に与えたりすると起きる. bounds 配列のインデックスについてランタイムチェックを行う. do ループ変数の不正な変更についてランタイムチェックを行う. mem メモリの動的確保についてランタイムチェックを行う. 明示的にメモリ確保を行うallocate文に対するランタイムチェックは常に行われるので,このオプションの有無は影響しない. pointer ポインター(pointer)と動的配列(allocatable)に対するランタイムチェックを行う. recursion 再帰的手続き(recursive)として定義されていない手続きの再帰的な呼び出しについてランタイムチェックを行う.