Sun Studio 12: Fortran プログラミングガイド

5.1.3 -Xlist と大域的なプログラム検査の例

次の例で使用される Repeat.f ソースコードを示します。


demo% cat Repeat.f
       PROGRAM repeat
         pn1 = 27.005
         CALL subr1 ( pn1 )
         CALL newf ( pn1 )
         PRINT *, pn1
       END

       SUBROUTINE subr1 ( x )
         IF ( x .GT. 1.0 ) THEN
          CALL subr2 ( x * 0.5 )
         END IF
       END

       SUBROUTINE newf( ix )
         INTEGER PRNOK
         IF (ix .eq. 0) THEN
                ix = -1
         ENDIF
         PRINT *, prnok ( ix )
       END

       INTEGER FUNCTION prnok ( x )
         prnok = INT ( x ) + .05
       END

       SUBROUTINE unreach_sub()
         CALL sleep(1)
       END

       SUBROUTINE subr2 (x)
         CALL subr1(x+x)
       END

例: -XlistX を使用して、エラー、警告、および相互参照を表示します。


demo% f95 -XlistX Repeat.f
demo% cat Repeat.lst
Repeat.f                    (月) 3 月 18 18:08:27 2002 ページ 1

FILE  "Repeat.f"
program  repeat
     4           CALL newf ( pn1 )
                             ^
**** エラー #418: 実引数 "pn1" は real ですが、仮引数は integer です。
                 "Repeat f" の 14 行目を参照してください。
     5           PRINT *, pn1
                          ^
**** エラー #570: 変数 "pn1" は real として参照されていますが、
                 4 行目では integer として設定されています。
subroutine  newf
    19           PRINT *, prnok  ( ix )
                                   ^
**** エラー #418: 引数 "ix" は integer ですが、仮引数は real です。
                 "Repeat f" の 22 行目を参照してください。
function  prnok
    23           prnok = INT ( x ) + .05
                 ^
**** 警告 #1024: 型 "integer*4" の値への型 "real*4" の
                 疑わしい代入値
subroutine  unreach_sub
    26         SUBROUTINE unreach_sub()
                          ^
**** 警告 #338: サブルーチン "unreach_sub" はプログラムから呼び出されません。
subroutine  subr2
    31           CALL subr1(x+x)
                 ^
**** 警告 #348:"subr1" の再帰的呼び出し。動的呼び出しを参照してください:
                 "Repeat f" の 10 行目
                 "Repeat f" の 3 行目

相互参照 (月) 3 月 18 18:08:27 2002 ページ 2

         相 互 参 照 表

  ソースファイル: Repeat.f


凡例:
D        定義 / 宣言
U        単純な使用
M        変更箇所
A        実引数
C        サブルーチン / 関数呼び出し
I        初期設定: DATA または拡張宣言
E        EQUIVALENCE での出現
N        NAMELIST での出現
L        モジュールを使用します



相互参照 (月) 3 月 18 15:40:57 2002 ページ 3

プ ロ グ ラ ム 形 式

 プログラム
 -------

repeat          <repeat>        D      1:D

相互参照 (月) 3 月 18 03:40:57 午後 2002 ページ 4


 関数とサブルーチン
 -------------------------

INT      intrinsic
                <prnok>         C     23:C

newf            <repeat>        C      4:C
                <newf>          D     14:D

prnok    int*4  <newf>         DC     15:D     19:C
                <prnok>        DM     22:D     23:M

sleep           <unreach_sub>            C     27:C

subr1           <repeat>        C      3:C
                <subr1>         D      8:D
                <subr2>         C     31:C

subr2           <subr1>         C     10:C
                <subr2>         D     30:D

unreach_sub     <unreach_sub>            D     26:D

相互参照 (月) 3 月 18 03:40:57 午後 2002 ページ 5


 変数と配列
 --------------------

ix      int*4  dummy
                <newf>       DUMA     14:D     16:U     17:M     19:A

pn1      real*4 <repeat>      UMA      2:M      3:A      4:A      5:U

x       real*4 dummy
                <subr1>        DU      8:D      9:U     10:U
                <subr2>        DU     30:D     31:U     31:U
                <prnok>        DA     22:D     23:A

------------------------------------------------------------------
統計情報 (月) 3 月 18 15:40:57 2002 ページ 6


日付: (月) 3 月 18 15:40:57 2002
オプション:   -XlistX
ファイル:      2 (ソース: 1、ライブラリ: 1)
行:            33 (ソース: 33、ライブラリサブプログラム: 1)
ルーチン:      6 (主: 1、サブルーチン: 4、関数: 1)
メッセージ:    6 (エラー: 3、警告: 3)