• ベストアンサー
  • 困ってます

fortran subroutineについて

  • 質問No.4685280
  • 閲覧数270
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 50% (4/8)

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
10continue
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
  • ベストアンサー

ベストアンサー率 43% (833/1926)

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

お礼率 50% (4/8)

回答ありがとうございます。

納得できました。
自分で勝手に勘違いしてややこしくなってたみたいでした。
投稿日時:2009/02/03 17:40

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 23% (3656/15482)

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

お礼率 50% (4/8)

実数型ですね
投稿日時:2009/02/03 15:03
お礼コメント
xmanabix

お礼率 50% (4/8)

回答ありがとうございます。

ためしに
integer a,b
を削除したら何もなくなりました。

でもなぜ直ったのかどうかわかりません。
integerは使えないということなんでしょうか。
でも、何も書かない状態はこの場合整数型ですよね・・・。

subroutinの内容ですが、
質問文のプログラム中に
subroutine sub(a,b)
write(*,*) ,'No.2'
return
end
ただ「No2」と書くだけです。特にこれといった目的はありません。
投稿日時:2009/02/03 14:39
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ