[フォートランコンパイラのデフォルトオプションの変更(6/25)のお知らせ]
物性研の荻津です。6/65日のシステム作業の際、フォートランコンパイラ のデフォルトオプションとして、-Abを加えることとなりました。このオプショ ンの詳細については、man frtpxを御覧下さい。ここでは、簡単な内容と、こ の理由を説明します。
-Abオプションは、サブルーチンの変数(配列ではなく)の引渡し法を、値渡 しではなくアドレス渡しにするオプションです。このオプションをデフォルト として採用する理由ですが、値渡しがデフォルトであると(現在)、デバッグ オプション-Da(引数チェック)が正しく機能しない場合があることが判明し たためです。引数の型チェック(-Da)オプションを常に正常に動作させるた めには、引数の渡し方を常にアドレス渡しにしておく必要があります。このた め、-Ab(アドレス渡し)をデフォルトとして採用することになりました。
(注) この変更で、実行結果が変わった方は、以下のようなプログラムを書 いていないかチェックして下さい。
以下のcommonに関して誤りを含むプログラムにおいて 位置取り, 値取りの時, 実行結果が異なります.
-------------------- sample program ------------------------------------ C234567 program sample real*8 arg common arg arg=1.0 write(*,*) 'main program arg = ',arg call sub1(arg) write(*,*) 'after main program arg = ',arg stop end C subroutine sub1(arg) real*8 arg arg=2.0 write(*,*) 'subroutine sub1 arg = ',arg call sub2 return end C subroutine sub2 real*8 arg common arg write(*,*) 'subroutine sub2 arg = ',arg return end -------------------- sample program ------------------------------------ 実行結果 1. 値取りの時 main program arg = 1.000000000000000 subroutine sub1 arg = 2.000000000000000 subroutine sub2 arg = 1.000000000000000 after main program arg = 2.000000000000000 2. 位置取りの時 (-Abオプション使用) main program arg = 1.000000000000000 subroutine sub1 arg = 2.000000000000000 subroutine sub2 arg = 2.000000000000000 <- 実行結果異 after main program arg = 2.000000000000000実行結果が異なる原因は値取りの場合, commonの変数(arg)が, sub1での変更が反映される前に, sub2でcommonをアクセスしている為に発生しています.