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件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
オプション指定の結果についての補足、拝見しました。
6つのうち、後ろ3つはともかく、前3つはどのような値でそうした結果になったのでしょうか。
また補足された他の例を見ると、定数解釈の違いというより、古い言語仕様で解釈するオプションが妥当な気がします。
解説を読むと該当部分を上手く処理できるようには思えないのですが、
http://www.xlsoft.com/jp/products/intel/cvf/docs …
などどうでしょうか。
参考URL:http://www.xlsoft.com/jp/products/intel/cvf/docs …
No.1
- 回答日時:
このオプション指定でどうですか。
http://www.xlsoft.com/jp/products/intel/cvf/docs …
参考URL:http://www.xlsoft.com/jp/products/intel/cvf/docs …
この回答への補足
ご返答ありがとうございました。
早速テストしてみましたが、やっぱりダメでした(これで解決する、と思ったんですが。。。)。結果は、以下のようになります。
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要素の配列と、変数(非配列)を同一視してもらえない。
既存のプログラムではこのように成っているので、昔はできたということだと思います。
申し訳ありませんが引き続きよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
- Visual Basic(VBA) ワークシートごとに計算結果 2 2022/04/30 22:00
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- UNIX・Linux bash環境でのエラー対応をお願い致します。 1 2022/11/26 17:41
- Windows 10 数年前からWindows10 の Update ができないです。なぜですか? 7 2022/11/09 06:03
- C言語・C++・C# 3つの倍精度浮動小数点値の平均を求めて、3つの引数全てを平均値に変更するメソッドを作成し、キーボード 1 2022/07/13 16:04
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数の値が勝手に変化する原因
-
【JAVA】数字をひし形に出力す...
-
JCLの基本について教えてください
-
ループのとめ方
-
main関数終了時のreturnの意味は?
-
ProC 固定SQLでNULLってどう表...
-
c言語 至急お願い致します
-
_dupenv_s関数でメモリリーク
-
カシオ fx-5800P 測量プログラ...
-
プログラミングの課題で困って...
-
Tiny Basicのプログラムです。。
-
0除算して、落ちるプログラムと...
-
正しい五十音順について
-
Excelで4096点以上のFFTの方法
-
C++ で、「)」が必要 というエ...
-
あるプログラムのコマンドライ...
-
VBAで仕様書は書きますか?
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
Excelに埋め込んだVBAのプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【JAVA】数字をひし形に出力す...
-
プログラミング
-
ruby
-
変数の値が勝手に変化する原因
-
JCLの基本について教えてください
-
Fortran90についての質問です。
-
fortran if文
-
3つの整数のうち奇数のみを表示...
-
Sublime Text 3でのFortranプロ...
-
Matlabについて質問2
-
ProC 固定SQLでNULLってどう表...
-
COBOLのピリオド
-
360度を超える角度
-
main関数終了時のreturnの意味は?
-
Visual Basic 三辺の長さ? ...
-
c言語です
-
C言語 バッファについて。
-
c言語のプログラミング 2つの整...
-
_dupenv_s関数でメモリリーク
-
N88basicを用いたGPIB制御
おすすめ情報