![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
fortranの配列で範囲を超えた参照を行なってしまった場合、私が使っているコンパイラは何も警告とかエラーを発しません。たとえば、以下のようなものです。
real a(100)
write(*,*) a(0)
write(*,*) a(0)
stop
end
ここで、配列aは1~100までであり、0番は不定なので、何の値が返されても文句なし、ということなのかとは思います。(C言語では0~99ですかね。)
私の希望はコンパイラによるエラー検出なのですが、それができません。粛々と実行し妙な値を返します。また、その値は実行中に変化したりするようです(それも不定だから文句言えないのですが。)
私が仕様しているのはintel visual fortran ver.2.11です。コンパイラオプションで対処できるでしょうか。よろしくお願いします。
No.2ベストアンサー
- 回答日時:
intel fortran の、配列はみ出し検出のコンパイラのオプションは /check:bounds です。
コンパイラのオプションは /help で表示されるので、それを見るのが良いと思います。
詳しくはマニュアルを読めば書いてあります。
なお intel visual fortran には ver.2.11 は存在しません。よくご確認ください。
普通Fortranでは、計算スピードが遅くなるので、実行時に配列はみ出しチェックなどはしません。デバッグ時にのみ使用します。また50年前くらいの整合配列がなかったころの古いプログラムでは、配列はみ出し前提のサブルーチンなどが使用されるので、はみ出しチェックは余計なお世話という場合もあります。
回答ありがとうございました。verは2.11ではなく、11.2でした。タイプミスですみません。Fortranの学習と処理系の学習の両方が必要だということがわかりました。また、とにかく早く早く計算するため、読めて使えるものがプログラマにとって有用かどうかなどチェックしないということもわかりました。
処理系(コンパイラ)のマニュアルはすべて目を通すか、必要なときだけ参照するかという問題はあるかと思いますが。マニュアルを全部読み込んだ頃、次のバージョンが出そうですけれども。
No.1
- 回答日時:
○ 添字に変数等が使われている場合、実行するまでどんな値になるか判明しない
○定数を使う場合でも、下限値の設定が可能なので、 「0以下は警告」と言った単純な判定はできない。
と、通常のコンパイルでの解析よりも踏み込んだ解析が必要であり、判断が困難(あるいは不可能)です。
当該Fortranは使ったことが無いのですが、とりあえずは「警告レベルを最高段階にする」ことでも警告等が出ないようなら、無理だと考えてよいでしょう
回答有難うございます。昔は配列破壊とか言って、計算のシステムがおかしくなるから計算自体が止まるのかと思っていました。システムがおかしくなるのではなく、引いてきた値がおかしいから計算結果が爆発してしまうと理解しました。やってみなければ分からない(たまたま思ったように動作してしまったりする)ということがわかりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- C言語・C++・C# 変数のスコープ 5 2023/05/27 17:50
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Visual Basic(VBA) Excel VBAで教えてください 4 2022/05/11 22:20
- Excel(エクセル) セルを参照して条件で値をコピーする 3 2023/02/08 17:45
- Visual Basic(VBA) エクセルのマクロとシートの保護について教えてください。 1 2022/10/18 08:36
- Visual Basic(VBA) 別ブックの列同士の値が一致したときの処理 1 2022/09/03 08:27
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
C++ で、「)」が必要 というエ...
-
ccコマンドの使い方
-
関数の戻り値による変数の初期化
-
変数(関数)名の頭に_
-
CPUが16bitでも32bitOSでコンパ...
-
PC-9801用のフリーな高級言語を...
-
isnanの取り扱いについて
-
Visual studio 2015とフォート...
-
コンパイルできない
-
__extension__
-
Fortranの配列の範囲を超えた参...
-
FORTRANとC++の連動について
-
COBOLのEVALUATE文について
-
どのプログラミング言語ででき...
-
コンパイラの制限 : ヒープの領...
-
正しい五十音順について
-
65536は2の何乗なのでしょうか?
-
あるプログラムのコマンドライ...
-
Excelで4096点以上のFFTの方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
CPUが16bitでも32bitOSでコンパ...
-
C++ で、「)」が必要 というエ...
-
C++でアボート(Abort)で処理が...
-
コンパイルできない
-
io.hをincludeするとそのような...
-
変数(関数)名の頭に_
-
コンパイラについて
-
fortranでのNaNについて
-
ABAQUS ユーザーサブルーチン...
-
volatile修飾について
-
Visual C++とVisual C++.NETの違い
-
コンパイラの制限 : ヒープの領...
-
Eclipseの環境設定について
-
graph.hがincludeできない
-
Delphiの逆コンパイル
-
プリコンパイラとは?
-
sprintfを用いたフォーマット文...
-
PICマイコンによる乱数の表示に...
-
C++の Unhandled Exceptionにつ...
おすすめ情報