はしがき
基本的に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)として定義されていない手続きの再帰的な呼び出しについてランタイムチェックを行う。