For 文で、ネストの深さや回数に制限はあるのでしょうか。


78爺  2018-07-27 16:47:48  No: 49332

社員の組合せを列挙するシミュレーションプログラムを作っているのですが、For文を使い、ネストが20段階くらいになっています。ある時はうまくいくのですが、それぞれの段階で、さらにforの回数が増えるとエラーになり、変数や配列が壊れてしまいます。For文には深さや回数に制限があるのでしょうか。Delphi7を使用しています。


igy  2018-07-27 18:38:51  No: 49333

> エラーになり、変数や配列が壊れてしまいます。

具体的には、エラーメッセージの表示は、どのようになっていますか?


通りすがり  2018-07-27 20:36:24  No: 49334

{$R+}で範囲チェックをONにして、まずはご自分のプログラムに不具合がないかを確認してみてはどうでしょう?


tor  2018-07-27 22:11:18  No: 49335

仮にシステム的に制限があったとしても、そのような制限を超えていたなら
コンパイルの段階で「ネストの深さが上限を超えました」のようなエラーが出るはずです。

そうではなく、実際にコンパイルと実行ができて
> 変数や配列が壊れてしまいます
というような現象が出るのなら、プログラミングミスが起きている可能性が高いと思います。
ループの制御変数を取り間違える(nのループの中なのにうっかりmを使ってしまう)とか
コードの構造を見間違える(15番目のループの中にコードを書いたつもりが、
実はもうそのループは抜けていて今は13番目の中にいた)とかですね。

一般に、コードの階層が7段もあれば「複雑すぎて保守困難な、危険なコードである」と言われます。
20階層というのは、普通の人の力で保守できる限界を超えているのではないでしょうか。
ループの制御変数が20もある時点で、もうどれが何のためのものだか分からなくなりそうです。

ループの中身を別の関数に分けて行って、一単位あたりのネストの深さを減らして
見通しを良くしながら確認していってはどうでしょう。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加