BHT-BASIC4.0の変数には、グローバルスコープ、モジュールスコープ、 ローカルスコープの3種類のスコープ範囲があります。 モジュールスコープ、 ローカルスコープの変数は、参照できる範囲が制限されていますので、範囲外で参照されると、実行エラー12h(スコープ違反です)となります。
このエラーは、主にプログラミングのミスにより、プログラムのフローが予期しない動作となって、発生します。
具体的には、以下のような原因が考えられます。プログラムを調査し、フロー異常が発生しないよう修正してください。
・goto関数でユーザ定義関数内にジャンプしている。
・ユーザー定義関数内のon error gotoが有効なまま、ユーザー定義関数を抜けている
→関数終了後に実行エラーが発生すると、ユーザ定義関数内にジャンプしてしまう。
・on error goto未設定のユーザー定義関数内でエラーが発生して、そのユーザー定義関数の呼び出し元の関数のエラー処理に抜け出している
スコープの詳細については、BHT-BASICプログラミングマニュアルの「5.2 変数のスコープ」を参照ください。 【FAQ】ユーザ定義関数内で発生するエラーのトラッピング(ON ERROR GOTO)もあわせてご覧ください。
たとえば、下例では、ユーザ定義関数「funcA」実行中に、関数内のエラートラップ処理「on error goto errA」を設定したまま、L4でメインルーチンに戻ります。その後、メインルーチンで実行エラーが発生すると、関数内のエラー処理errAへジャンプし、L6で関数内のローカル変数a$を参照するため、実行エラー12hとなります。
<例> | ||||
L1: | sub funcA | |||
L2: | private a$ | ' ローカルスコープ(関数内のローカル変数) | ||
L3: | on error goto errA | |||
L4: | exit sub | |||
L5: | errA: | |||
L6: | print a$ | |||
L7: | end sub | |||
main: | ||||
on error goto ERRmain | ||||
call funcA | ||||
xfile "test.dat" | ' エラーが発生すると、L5へジャンプ。 ' L6で実行エラー12hが発生。 |
|||
ERRmain: |