• ベストアンサー

fortran subroutineについて

fortran subroutineについて c c c kk.f c c integer a,b a=0 do 10 b=1,9,2 a=a+1 print * ,a 10 continue write(*,*) ,'No.1' call sub(a,b) stop end c subroutine sub(a,b) write(*,*) ,'No.2' return end  簡単に上記のようにつくってg77でコンパイルしたのですが、call文とsubroutine文の部分で警告が出ました。  実行ファイルは問題なく動作をするのですが、このままでもいいのでしょうか?ちなみに、警告文を読んでも僕には理解できませんでした。  以下、警告文です。 kk.f: In subroutine `sub': kk.f:13: warning: call sub(a,b) 1 kk.f:17: (continued): subroutine sub(a,b) 2 Argument #1 (named `a') of `sub' is one type at (2) but is some other type at (1) [info -f g77 M GLOBALS] kk.f:13: warning: call sub(a,b) 1 kk.f:17: (continued): subroutine sub(a,b) 2 Argument #2 (named `b') of `sub' is one type at (2) but is some other type at (1) [info -f g77 M GLOBALS]

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

FORTRANでは、型宣言を明示的に行わなければ、i~nで名前が始まる変数は整数型、それ以外は実数型になります。 今回のケースでは、サブルーチン側の変数a、bは、COMMONでもなく、内部サブルーチンでもないので、メイン側の変数a、bとは別の領域になっています。 メイン側では整数型を明示宣言、サブルーチン側では型宣言なしで実数型となるので、コンパイラが警告を表示してくれたということです。

xmanabix
質問者

お礼

回答ありがとうございます。 納得できました。 自分で勝手に勘違いしてややこしくなってたみたいでした。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ただの英語なんだけど, それでも理解できない? メインの実引数とサブルーチンの仮引数で型が違ってます, って言ってる. このままでいいかどうかはサブルーチンの処理の内容によるけどそれはこちらで知る由もないので自分で考えること.

xmanabix
質問者

お礼

回答ありがとうございます。 ためしに integer a,b を削除したら何もなくなりました。 でもなぜ直ったのかどうかわかりません。 integerは使えないということなんでしょうか。 でも、何も書かない状態はこの場合整数型ですよね・・・。 subroutinの内容ですが、 質問文のプログラム中に subroutine sub(a,b) write(*,*) ,'No.2' return end ただ「No2」と書くだけです。特にこれといった目的はありません。

xmanabix
質問者

補足

実数型ですね

関連するQ&A