プログラムを書いていると、エラーが出ることがあります。エラーの内容をしっかり理解して、動くプログラムを作っていきましょう!!
ERRNUM | 内容 | 説明 |
1 | Internal Error | プチコン3号の内部エラー |
2 | Illegal Instruction | プチコン3号の内部エラー |
3 | Syntax error | プログラムが間違っている |
4 | Illegal function call | 関数・命令のパラメータ数が合わない |
5 | Stack overflow | 再帰呼び出し等によって内部スタックが溢れた |
6 | Stack underflow | ? |
7 | Divide by zero | 数値を0で割った |
8 | Type mismatch | 関数・命令・変数の型が合わない |
9 | Overflow | 値が大きすぎる |
10 | Out of range | 関数・命令の値が範囲外である |
11 | Out of memory | メモリが不足している |
12 | Out of code memory | プログラムが長すぎる |
13 | Out of DATA | データが足りない |
14 | Undefined label*1 | 指定したラベルは存在しない |
15 | Undefined variable *2 | 指定した変数は存在しない |
16 | Undefined function *3 | 指定した関数・命令は存在しない |
17 | Duplicate label | ラベルが多重定義されている |
18 | Duplicate variable | 変数が多重定義されている |
19 | Duplicate function *4 | 関数・命令が多重定義されている |
20 | FOR without NEXT | FOR に対応する NEXT がない |
21 | NEXT without FOR | NEXT に対応する FOR がない |
22 | REPEAT without UNTIL | REPEAT に対応する UNTIL がない |
23 | UNTIL without REPEAT | UNTIL に対応する REPEAT がない |
24 | WHILE without WEND | WHILE に対応する WEND がない |
25 | WEND without WHILE | WEND に対応する WHILE がない |
26 | THEN without ENDIF | IF に対応する ENDIF がない |
27 | ELSE without ENDIF | ELSE に対応する ENDIF がない |
28 | ENDIF without IF | ENDIF に対応する IF がない |
29 | DEF without END | DEF に対応する ENDがない |
30 | RETURN without GOSUB | RETURN があるのに GOSUB がない |
31 | Subscript out of range | 配列変数の添字が範囲外である |
32 | Nested DEF | DEF の中に DEF がある |
33 | Can't continue | プログラムを再開出来ない |
34 | Illegal symbol string *5 | ラベル文字列が不正 |
35 | Illegal file format*6 | ファイルフォーマットが不正 |
36 | Mic is not available | マイク機能が無効 |
37 | Motion sensor is not available | ジャイロセンサー機能が無効 |
38 | Use PRGEDIT before any PRG function | PRGEDIT を実行する前に PRG 系命令を使用した |
39 | Animation is too long | アニメーションデータが長すぎる |
40 | Illegal animation data | アニメーションデータが不正 |
41 | String too long | 文字列が長すぎる |
42 | Communication buffer overflow | ワイヤレス通信バッファが溢れた |
43 | Can't use from direct mode | ダイレクトモードでは使えない命令 |
44 | Can't use in program | プログラム内では使えない命令 |
45 | Can't use in tool program *7 | SMILE ボタンに登録したプログラムから、この命令は利用できない |
46 | Load failed | ファイルの読み込みに失敗した |
47 | Illegal MML | MML コマンドが間違っている |
ERRNUM | 内容 | 説明 |
48 | Uninitialized variable used *8 | 未初期化の変数を参照した |
ERRNUM | 内容 | 説明 |
49 | Protected resource | 保護されたリソースを変更しようとした |
50 | Protected file | 保護されたファイルを変更しようとした |
51 | DLC not found | 該当のDLCが購入されていない |
ERRNUM | 内容 | 説明 |
52 | Incompatible statement | 現在の互換モードでは使用できない |
53 | Without CALL | ? |
54 | Array is too large | SAVE で保存しようとした配列変数のサイズが大きすぎる |
エラーの主な原因を解説します。
ラベルに空文字列を指定すると発生します。GOSUB と RESTORE も同様です。
- GOTO ””
GOSUBで別スロットに飛んだあと、EXEC等で呼び出し元のスロットを上書きすると発生します。
SLOT0:
- USE 1
- GOSUB ”1:@1”
SLOT1:
- @1
- EXEC ”PRG0:HOGE” ’空でないファイルなら何でもよい
- RETURN
- HELLO
この時点では HELLO は有効な変数名、命令名ではありません。
- $$$$$$
解読できない根本的な文法の間違いがあるプログラムにもこのエラーが発生します。
- COLOR 1,2,3
- ACLS 1
COLOR は1個または2個の引数を渡す命令だが、ここでは3個の引数が渡されているのでエラーになります。
また、ACLS は、引数を指定しないか、指定するときは3個の引数を指定しなければなりませんが、ここでは引数は1個しかありません。
ファイル読み込みや保存の時に、ファイル名に「NUL」「AUX」「CON」「COM1〜4」を指定すると、Illegal function callが発生します。
- LOAD ”PRG0:NUL”
ファイルが存在してもしなくてもエラーになります。
なお、簡易ロードや簡易セーブ、FILE MENUからの操作はできます。
- DEF TEST
- WHILE TRUE
- TEST ’TESTを再度呼び出す
- WEND
- END
- TEST
しばらく経つとエラーが発生します。
再帰呼び出しの際は、適切な条件を設定して無限に呼び出すことがないように注意しましょう。 以下は再帰呼び出しで数学の階乗を求める例です。きちんと IF で適切な条件が設定されています。
- DEF F(N)
- IF N==0 THEN RETURN 1
- RETURN F(N−1)*N
- END
- PRINT ”3/0=”;3/0
数値を0で割っているのでエラーとなる。
数値を0で割るかもしれない部分があったら、割る数が0かどうかチェックする IF 文を加えておきましょう。
- A=”HELLO”
- B$=123
数値変数には数値を、文字列変数には文字列をしなければなりません。
- COLOR ”BLUE”
命令に渡す引数の型が合っていない。 COLOR には数値変数を渡さなければなりません。
左を文字列、右を数値として比較(== != < > <= >=)すると3が返るもので、ユーザーによって発見されました。
本来のところならば Type mismatch エラーとなるべきですが、この方法を使用して変数の型をチェックするプログラム事例もあります。また、この仕様は ver 3.6.3 現在も変更されていません。
- VAR A=−100
- PRINT 10>0 ’1
- PRINT A>0 ’0
- PRINT ”TEST”>0 ’3
- COLOR 100
COLOR には0〜15の値を指定しなければなりませんが、100が指定されています。
- DIM TEST[10000000]
要素数を減らしましょう。
以降編集中
ご指摘、ご要望、ご感想があればお書きください。
*1
GOTO 、 GOSUB 、 RESTORE などにより発生可能
*2
VAR により発生可能
*3
CALL により発生可能
*4
ユーザー関数ではなくユーザー命令の定義でも発生
*5
ラベル文字列の @ がないなど
*6
リソースを間違えた時などにはっせい
*7
例えば、 COMMON など
*8
関数・命令が値を返していない時や、省略された引数を参照した時に発生する
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.048 秒 | このページの最終更新 : 2019/11/21 (木) 22:28:03 (24d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30