dポイントプレゼントキャンペーン実施中!

Fortran "実引数の型が仮引数の型と異なります。"
Intel Visual Fortranの最新版をMS Visual Studio 2008で使用(お試し)しています。
既存のFortranプログラムでエラーが出て、使えなくなりました。
問題点を要約すると以下のようなシンプルなコードに集約されました。
----------------------
00 program main
01 call sub1(10.d0)
02 call sub1(10.0)
03 end
! ----------------------
04 subroutine sub1(rr)
05 real*8 rr
06 write(*,*) 'rr = ', rr
07 end subroutine
! ---------------------
昔のFortranでは、Subをcallする時に、仮引数の型と厳密に一致していなくても、うまく処理してくれたと思います。(倍精度でも整数でも、同じ数値とみなして)

オプションのルーチンインターフェースのチェック(/warn:interfaces)をオフにすると、コンパイルは出来るようになるのですが、上記プログラムの計算結果は、01行と02行で結果が異なってきます。
(02行はおかしな値が入る)

本来、ランタイムエラー防止の観点からは、このような厳密性を要求するのは良いことだと思いますが、既存のプログラムが実行できなくなるのは痛手なので、何かオプションの変更で対応出来ないものでしょうか?

よろしくお願いいたします。

A 回答 (2件)

オプション指定の結果についての補足、拝見しました。


6つのうち、後ろ3つはともかく、前3つはどのような値でそうした結果になったのでしょうか。
また補足された他の例を見ると、定数解釈の違いというより、古い言語仕様で解釈するオプションが妥当な気がします。
解説を読むと該当部分を上手く処理できるようには思えないのですが、
http://www.xlsoft.com/jp/products/intel/cvf/docs …
などどうでしょうか。

参考URL:http://www.xlsoft.com/jp/products/intel/cvf/docs …
    • good
    • 0

この回答への補足

ご返答ありがとうございました。
早速テストしてみましたが、やっぱりダメでした(これで解決する、と思ったんですが。。。)。結果は、以下のようになります。

r = 524288.000000001
r = 5.398241245570834E-315
r = 2.641070453192158E-308
r = 10.0000000000000
r = 10.0000000000000
r = 10.0000000000000

補足ですが、倍精度・単精度の時だけでなく、文字列のサイズが違う場合や、以下のような配列の例でもだめのようです。

-------------------
real x
call sub(1,x)
-----------------------
subroutine sub(n,y)
dimension y(n)
※1要素の配列と、変数(非配列)を同一視してもらえない。
既存のプログラムではこのように成っているので、昔はできたということだと思います。

申し訳ありませんが引き続きよろしくお願いいたします。

補足日時:2010/05/12 08:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!