プチコン3号&BIGまとめWiki

エラーメッセージ

パンくずリスト

プログラムを書いていると、エラーが出ることがあります。エラーの内容をしっかり理解して、動くプログラムを作っていきましょう!!

エラーメッセージ一覧

ver 3.1.0で確認

ERRNUM内容説明
1Internal Errorプチコン3号の内部エラー
2Illegal Instructionプチコン3号の内部エラー
3Syntax errorプログラムが間違っている
4Illegal function call関数・命令のパラメータ数が合わない
5Stack overflow再帰呼び出し等によって内部スタックが溢れた
6Stack underflow?
7Divide by zero数値を0で割った
8Type mismatch関数・命令・変数の型が合わない
9Overflow値が大きすぎる
10Out of range関数・命令の値が範囲外である
11Out of memoryメモリが不足している
12Out of code memoryプログラムが長すぎる
13Out of DATAデータが足りない
14Undefined label指定したラベルは存在しない
15Undefined variable指定した変数は存在しない
16Undefined function指定した関数・命令は存在しない
17Duplicate labelラベルが多重定義されている
18Duplicate variable変数が多重定義されている
19Duplicate function関数・命令が多重定義されている
20FOR without NEXTFOR に対応する NEXT がない
21NEXT without FORNEXT に対応する FOR がない
22REPEAT without UNTILREPEAT に対応する UNTIL がない
23UNTIL without REPEATUNTIL に対応する REPEAT がない
24WHILE without WENDWHILE に対応する WEND がない
25WEND without WHILEWEND に対応する WHILE がない
26THEN without ENDIFIF に対応する ENDIF がない
27ELSE without ENDIFELSE に対応する ENDIF がない
28ENDIF without IFENDIF に対応する IF がない
29DEF without ENDDEF に対応する ENDがない
30RETURN without GOSUBRETURN があるのに GOSUB がない
31Subscript out of range配列変数の添字が範囲外である
32Nested DEFDEF の中に DEF がある
33Can't continueプログラムを再開出来ない
34Illegal symbol stringラベル文字列が不正
35Illegal file formatファイルフォーマットが不正
36Mic is not availableマイク機能が無効
37Motion sensor is not availableジャイロセンサー機能が無効
38Use PRGEDIT before any PRG functionPRGEDIT を実行する前に PRG 系命令を使用した
39Animation is too longアニメーションデータが長すぎる
40Illegal animation dataアニメーションデータが不正
41String is too long
(String too long)
文字列が長すぎる
42Communication buffer overflowワイヤレス通信バッファが溢れた
43Can't use from direct modeダイレクトモードでは使えない命令
44Can't use in programプログラム内では使えない命令
45Can't use in tool programSMILE ボタンに登録したプログラムから、この命令は利用できない
46Load failedファイルの読み込みに失敗した
47Illegal MMLMML コマンドが間違っている
MMLで発生するエラーメッセージ

ver 3.2.0で確認

ERRNUM内容説明
48Uninitialized variable used未初期化の変数を参照した

ver 3.3.0で確認

ERRNUM内容説明
49Protected resource保護されたリソースを変更しようとした
50Protected file保護されたファイルを変更しようとした
51DLC not found該当のDLCが購入されていない

ver 3.5.0で確認

ERRNUM内容説明
52Incompatible statement現在の互換モードでは使用できない
53END without CALL?
54Array is too largeSAVE で保存しようとした配列変数のサイズが大きすぎる
 

エラーの具体的な発生原因

エラーの主な原因を解説します。

Internal Error

  • プチコン3号の内部エラーです。

ラベルに空文字列を指定すると発生します。GOSUBRESTORE も同様です。

  1. GOTO ””
 

Illegal Instruction

  • プチコン3号の内部エラーです。

GOSUBで別スロットに飛んだあと、EXEC等で呼び出し元のスロットを上書きすると発生します。
SLOT0:

  1. USE 1
  2. GOSUB ”1:@1”

SLOT1:

  1. @1
  2. EXEC ”PRG0:HOGE” ’空でないファイルなら何でもよい
  3. RETURN
 

Syntax error

  • 定義されていない命令や関数、演算子などを使用した時に発生します。
  • その他、構文に関する最も一般的なエラーです。
例1
  1. HELLO

この時点では HELLO は有効な変数名、命令名ではありません。

例2
  1. $$$$$$

解読できない根本的な文法の間違いがあるプログラムにもこのエラーが発生します。

 

Illegal function call

  • 命令や関数の呼び出し方が間違っている場合に発生します。
  1. COLOR 1,2,3
  2. ACLS 1

COLOR は1個または2個の引数を渡す命令だが、ここでは3個の引数が渡されているのでエラーになります。
また、ACLS は、引数を指定しないか、指定するときは3個の引数を指定しなければなりませんが、ここでは引数は1個しかありません。

解決策
  • ヘルプなどを見て、引数を正しく指定しましょう。
 

Stack overflow

  • 再帰呼び出しによってスタックがあふれたとき発生します。
    • 再帰呼び出しとは、DEF で定義している命令や関数を、定義している中で呼び出すことです。
    • GOSUBでも発生します。
    • 再帰呼び出しをうまく使うと、とてもシンプルに組めることがありますが、単に再帰呼び出しすると無限に呼び出し続けてしまいます。
    • 再帰呼び出しには内部のスタックと呼ばれるメモリ領域が必要です。無限に再帰呼び出しするとスタックがあふれてしまうので、結果としてエラーとなります。
  1. DEF TEST
  2.  WHILE TRUE
  3.   TEST ’TESTを再度呼び出す
  4.  WEND
  5. END
  6. TEST

しばらく経つとエラーが発生します。

解決策

再帰呼び出しの際は、適切な条件を設定して無限に呼び出すことがないように注意しましょう。 以下は再帰呼び出しで数学の階乗を求める例です。きちんと IF で適切な条件が設定されています。

  1. DEF F(N)
  2.  IF N==0 THEN RETURN 1
  3.  RETURN F(N−1)*N
  4. END
 

Stack underflow

  • スタックが不足している場合に発生します。
  • 発生条件は不明となっています。
 

Divide by zero

  • 数値を0、あるいは0に限りなく近い数値で割ったときに発生します。
  1. PRINT ”3/0=”;3/0

数値を0で割っているのでエラーとなる。

解決策

数値を0で割るかもしれない部分があったら、割る数が0かどうかチェックする IF 文を加えておきましょう。

 

Type mismatch

  • 値の型があっていない時に発生します。
    • 命令や関数に渡す引数の型が合っていない。
    • 演算子の左、または右の式の型が合っていない
例1
  1. A=”HELLO”
  2. B$=123

数値変数には数値を、文字列変数には文字列をしなければなりません。

例2
  1. COLOR ”BLUE”

命令に渡す引数の型が合っていない。 COLOR には数値変数を渡さなければなりません。

バグ

左を文字列、右を数値として比較(== != < > <= >=)すると3が返るもので、ユーザーによって発見されました。
本来のところならば Type mismatch エラーとなるべきですが、この方法を使用して変数の型をチェックするプログラム事例もあります。また、この仕様は ver 3.6.3 現在も変更されていません。

  1. VAR A=−100
  2. PRINT 10>0 ’1
  3. PRINT A>0 ’0
  4. PRINT ”TEST”>0 ’3
 

Overflow

  • 整数型変数や、整数型で値を扱う命令や演算に範囲外の値(-2147483648より小さい、または2147483647より大きい)を渡したときに発生します。
  1. A=10000000000 MOD 7
 

Out of range

  • 命令、関数の引数の値が範囲外であるときに発生します。
  1. COLOR 100

COLOR には0〜15の値を指定しなければなりませんが、100が指定されています。

 

Out of memory

  • メモリーが足りなくなったとき発生します。
  • 特に、巨大な要素数の配列変数を宣言しようとすると発生します。
  1. DIM TEST[10000000]
解決策

要素数を減らしましょう。

 

Out of code memory

  • プログラムが長すぎるときに発生します。
  • 発生条件は不明となっています。
 

Out of DATA

  • READで読み込むデータがないときに発生します。
  1. READ A,B,C,D
  2. DATA 1,2,3
 

Undefined label

  • GOTO,GOSUB,RESTOREなどで指定したラベルがないときに発生します。
 

Undefined variable

  • OPTION STRICT時に定義していない変数を使った時に発生します。
  • VARで指定した変数がないときにも発生します。
例1
  1. OPTION STRICT
  2. A=5

OPTION STRICTがあるときはVAR Aのように使う変数を定義しないといけません。

例2
  1. PRINT VAR(”TEST”)

変数TESTがあるときはその内容が表示されますが、ないときはエラーになります。

 

Undefined function

  • CALLで指定した命令がないときに発生します。
    • 最初からプチコンにある命令では、CALLが使える命令と使えない命令があります。
  1. CALL ”LOCATE”,10,10
  2. CALL ”PRINT”,”TEST”

LOCATECALLで使えますがPRINTは使えません。
実はLOCATEPRINTはエディットモードで表示される色が少し違います。(設定による)

 

Duplicate label

  • 同じラベルが2つ以上あるときに発生します。
 

Duplicate variable

  • 同じ名前の配列変数を定義したときに発生します。
  • OPTION STRICTでは通常の変数でも複数定義したときに発生します。
 

Duplicate function

  • 同じ名前の命令を2つ以上定義したときに発生します。
    • 最初からプチコンにある命令と同じ名前で定義したときにも発生します。
 

FOR without NEXT

  • NEXTがありません。

NEXT without FOR

  • FORがないのにNEXTがあります。

REPEAT without UNTIL

  • UNTILがありません。

UNTIL without REPEAT

  • REPEATがないのにUNTILがあります。

WHILE without WEND

  • WENDがありません。

WEND without WHILE

  • WHILEがないのにWENDがあります。

THEN without ENDIF

  • ENDIFがありません。
    • 1行のIFの場合はTHENの後に命令を書いてください。

ELSE without ENDIF

  • ENDIFがありません。
    • IFがないのにELSEがある場合は Syntax error になります。

ENDIF without IF

  • IFがないのにENDIFがあります。

DEF without END

  • DEFENDがありません。

RETURN without GOSUB

  • GOSUBがないのにRETURNがあります。
    • GOSUBを使わずにGOSUBのルーチンに入ってしまった場合など。
注意
  • 「×× without ○○」 → 「○○がない××」。 無いのは後ろに書いてある方です。
  • 上にあげた「○○がありません」系のエラーは、プチコンにはどこに入れるべきものかわからないため、エラー行が変な位置になる場合があります。
 

Subscript out of range

  • 配列変数の添字が定義したサイズより大きいときに発生します。
    • 命令、関数の引数の値が範囲外のときは Out of range ですが、こちらは配列変数限定のエラーです。
  1. DIM A[5]
  2. A[5]=1

この場合Aの要素数は5なので使えるのはA[0]A[4]です。

 

Nested DEF

  • DEF内で別のDEFを定義したときに発生します。
  1. DEF TEST1
  2. DEF TEST2
  3. END

このように、DEFに対応するENDがない場合にも発生することがあります。

 

Can't continue

  • 再開できないプログラムをCONTで再開しようとしたときに発生します。
    • 再開できるのはSTOPで停止したときと、STARTボタンや左下の「×STOP」をタッチしてプログラムを停止したときだけです。
 

Illegal symbol string

  • GOTOなどでラベルの指定方法が間違っているときに発生します。
  1. GOTO ”TEST”
 

Illegal file format

  • ファイルリソースが間違っているときに発生します。
    • EXECUSEにPRG以外のリソースを指定した。
    • GRPではないDATファイルをGRPとしてLOADしようとした。
  1. EXEC ”DAT:TEST”

最新バージョンのプチコンではエラーになりますが、更新前のプチコンではEXECでDATを読み込むことができてしまうようです。

 

Mic is not available

  • XON MICをする前にマイクの命令を使用しようとしたときに発生します。
 

Motion sensor is not available

  • XON MOTIONをする前にジャイロ等の命令を使用しようとしたときに発生します。
 

Use PRGEDIT before any PRG function

  • PRGEDITをする前にスロット操作命令を使用しようとしたときに発生します。
メモ

直訳すると「PRG関数の前にはPRGEDITを使ってください」
他のエラーはエラー内容を表示するのに、このエラーだけなぜか解決策を表示しています。

 

Animation is too long

  • SPANIMBGANIMに33個以上のデータを渡したときに発生します。
    • アニメーションデータは最大32個までしか使用できません。
 

Illegal animation data

  • SPANIMBGANIMで、時間に(絶対値が)1未満の数値を指定したときに発生します。
 

String is too long

  • 命令に渡す文字列が長すぎるときに発生します。
    • MPSENDは256文字までしか扱えません。
    • FORMAT$のフォーマット文字列は1024文字までのようです。
    • TALKは256文字までですが、超えると String is too long ではなく Illegal function call になります。
  • 更新前のプチコンでは String too long と表示されます。
 

Communication buffer overflow

  • MPSENDで大量のデータを送信したときに発生します。
 

Can't use from direct mode

  • ダイレクトモードでは使用できない命令を使用したときに発生します。
    • XSCREEN 4,DISPLAY,USE,EXEC,DEF,RESTORE,DATA,READ,STOP,OPTIONで発生します。
 

Can't use in program

  • プログラム中では使用できない命令を使用したときに発生します。
    • PROJECTで発生します。
    • それ以外のダイレクトモード専用命令を使用すると Syntax error になります。
 

Can't use in tool program

  • ツールプログラム(スマイルボタンから起動したプログラム)では使用できない命令を使用したときに発生します。
    • COMMON DEFで発生します。
 

Load failed

  • EXECUSEで読み込みに失敗したときに発生します。
    • ファイルが存在しない場合。
    • スロット上書きの確認ダイアログで「いいえ」を押した場合。
 

Illegal MML

  • MML文字列に誤りがあるときに発生します。
  1. BGMPLAY ”CDEFGH”
  1. Illegal MML in 0:1(BGMPLAY:1)
  2.   CDEFGH
  3.        ^
  4.  Unknown command (in Track 0)

のようにエラーが表示されます。

 

Uninitialized variable used

  • ユーザー定義命令の戻り値を設定しなかったときに発生します。
例1
  1. DEF TEST()
  2. END
  3. A=TEST()

RETURN 1のように値を返さなければいけません。

例2
  1. DEF TEST OUT X
  2. END
  3. TEST OUT A

この場合はX=1のように値を設定します。

 

Protected resource

  • 保護されたリソースを読みだそうとしたときに発生します。
    • カタログIPコラボ内のGRPファイルをロードしたグラフィックページに対してGSPOIT,GSAVE,GCOPY,SAVEをしたときに発生します。
    • カタログIPコラボ内のGRPファイルをGRPFにロードした後GPUTCHRしたときにも発生します。

Protected file

  • 保護されたファイルを操作しようとしたときに発生します。
    • カタログIPコラボ内のGRPファイルをDATとして配列変数にLOADしようとしたときに発生します。
 

DLC not found

  • カタログIPコンテンツや高度サウンドユニットを購入せずに使おうとしたときに発生します。
 

Incompatible statement

  • 3DSでXON WiiU、またはWiiUでXON 3DSをしたときに発生します。
  • またWiiUでXON WIIUをせずにWiiU専用命令を使おうとしたときにも発生します。
  • XON COMPAT時に端末IDやコントローラIDを指定した(BUTTON(1,1)など)ときにも発生します。
 

END without CALL

  • ユーザー定義命令を呼び出さずに、ユーザー定義命令のENDに到達したときに発生します。
  • 発生条件は不明となっています。
 

Array is too large

  • SAVEしようとした配列のサイズが大きすぎるときに発生します。
  • 発生条件は不明となっています。
 

コメント

ご指摘、ご要望、ご感想があればお書きください。

  • 初心者 : RETURN without GOSUB ってなんですか? (2018/03/28 (水) 15:52:22)
  • みどり : 「RETURNが無いGOSUBがあります」と言う意味です。 (2018/03/28 (水) 19:49:44)
  • moi : 逆ですね。RETURNはGOSUBで飛んできた位置へ戻る命令です。(別の場合もある)GOSUBで飛んできてないのに戻れと言われたらどこに行けばいいのか分からなくなりますよね。つまりそういうことです。長文失礼しました。 (2018/03/28 (水) 21:02:51)
  • Ryou Tanpo : RETURN without GOSUB は GOSUB がない RETURN のことです。GOSUBGOTO と違って、ジャンプした先に RETURN があると元のところに戻ることができます。逆に言えば、GOSUB がないと、どこに戻ればいいかわからない。この場合に発生するエラーです。 (2018/03/29 (木) 09:36:34)
  • Ryou Tanpo : 「違います」という言い方はちょっと言われた側ががっかりすると思います。 (2018/03/29 (木) 09:37:16)
  • Ryou Tanpo : ちなみに、DEF 内での RETURN は別の働きをするため例外となっています (2018/03/29 (木) 09:38:04)
  • 初心者 : おお、ありがとうございます! (2018/03/31 (土) 09:36:59)
  • moi : 大変失礼いたしました。 (2018/07/31 (火) 12:10:38)
  • Na : Illegal Instructionを発生させました→http://petitverse.hosiken.jp/community/petitcom/topic/?read=1326 (2019/10/31 (木) 19:16:01)
  • Na : 勝手に追記してみました。(前から編集してたけど) (2020/03/04 (水) 18:36:06)
  • 名無しさん : GOSUBがないRETURNはエラーじゃなくて無視するようにしてほしい(変数とIF使えばいけるとは思うが) (2020/03/06 (金) 12:21:03)
  • Na : こんなやり方を思いついたので次作るプログラムで使おうと思ってます:
    IF 0 THEN
     @LABEL
     (処理)
     RETURN
    ENDIF
    GOSUB @LABEL (2020/03/06 (金) 12:30:07)
  • Na : とりあえず全部書き終えましたが、一部詳細がわからなかった(stack underflow, out of code memory, end without call, array is too large)ので誰かわかる人がいたら教えてください。 (2020/03/07 (土) 10:06:17)

メニュー 【3号】

ヘルプ

リンク

最近の更新

最近の人気ページ

オンライン情報

  • 現在同時に 5 人がこのサイトを見ています
  • このページはこれまでに 3219 回、本日は 1 回、昨日は 2 回閲覧されました

ページの先頭に戻る

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.100 秒 | このページの最終更新 : 2020/03/29 (日) 20:32:43 (181d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30