FAQ

ERR=0012が発生する

実行エラー12h「スコープ違反です」が発生します。
原因と対処方法を教えてください。

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:  

お問合せ

QBdirect

まだ会員に登録されていない方

本会員専用サイトにおけるサービスは、会員登録していただいた上でのみご利用いただけます。

新規会員登録