プログラムを書いていると、エラーが出ることがあります。エラーの内容をしっかり理解して、動くプログラムを作っていきましょう!!
ERRNUM | 内容 | 説明 |
48 | Uninitialized variable used | 未初期化の変数を参照した |
ERRNUM | 内容 | 説明 |
49 | Protected resource | 保護されたリソースを変更しようとした |
50 | Protected file | 保護されたファイルを変更しようとした |
51 | DLC not found | 該当のDLCが購入されていない |
ERRNUM | 内容 | 説明 |
52 | Incompatible statement | 現在の互換モードでは使用できない |
53 | END 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個しかありません。
- 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
- A=10000000000 MOD 7
- COLOR 100
COLOR には0~15の値を指定しなければなりませんが、100が指定されています。
- DIM TEST[10000000]
要素数を減らしましょう。
- READ A,B,C,D
- DATA 1,2,3
- OPTION STRICT
- A=5
OPTION STRICTがあるときはVAR Aのように使う変数を定義しないといけません。
- PRINT VAR(”TEST”)
変数TESTがあるときはその内容が表示されますが、ないときはエラーになります。
- CALL ”LOCATE”,10,10
- CALL ”PRINT”,”TEST”
LOCATEはCALLで使えますがPRINTは使えません。
実はLOCATEとPRINTはエディットモードで表示される色が少し違います。(設定による)
- DIM A[5]
- A[5]=1
この場合Aの要素数は5なので使えるのはA[0]~A[4]です。
- DEF TEST1
- DEF TEST2
- END
このように、DEFに対応するENDがない場合にも発生することがあります。
- GOTO ”TEST”
- EXEC ”DAT:TEST”
最新バージョンのプチコンではエラーになりますが、更新前のプチコンではEXECでDATを読み込むことができてしまうようです。
- BGMPLAY ”CDEFGH”
- Illegal MML in 0:1(BGMPLAY:1)
- CDEFGH
- ^
- Unknown command (in Track 0)
のようにエラーが表示されます。
- DEF TEST()
- END
- A=TEST()
RETURN 1のように値を返さなければいけません。
- DEF TEST OUT X
- END
- TEST OUT A
この場合はX=1のように値を設定します。
ご指摘、ご要望、ご感想があればお書きください。
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.223 秒 | このページの最終更新 : 2022/09/20 (火) 12:49:33 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30