低レベルなヒトの覚え書き

●LSI C-86のエラー


3. 「BlockStack overflow」

種類: コンパイル時のエラー。
原因: if文による条件判定で、並列する条件の数が多すぎると、このエラーになるみたいです。
対策: エラーをなくすだけなら、条件を減らせばいいと思います。

[解説]

ここで問題にしているif文というのは、要するに、次のようなものです。

[パターン1]
 | if (条件1 && 条件2 && 条件3) {
 |   処理A
 | }

入れ子式に書き直せば、こんな感じになります。

[パターン2]
 | if (条件1) {
 |   if (条件2) {
 |     if (条件3) {
 |       処理A
 |     }
 |   }
 | }

いずれのパターンにしても、一度に判定できる条件の数は、最大で15個です。 条件の数が多すぎると、「BlockStack overflow」というエラーになります。
一度に判定できる条件の数が15個なのは、C言語の標準的な規格に基づく制限らしいです。

[余談 - その1]

メッセージの文面をみる限り、これも一種のスタックオーバーフローのようです。 当然、自動変数などを置くためのスタックとは別物の話だと思いますが、何がどう違うのかはわかりません。

[余談 - その2]

このエラーは、純粋に実験的な手続きのなかで発見したものです。 筆者自身は、このエラーに悩まされたことはありません。
そういう意味では、非常にマイナーなエラーなんじゃないかと思うのですが、とりあえず、せっかくだから紹介しておきます。

→トップ , →前へ(lsic2)


R.6: 2006/08/01
Copyright (C) 2005,2006 A.Satoshi