コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
MIKE猫Soft ◆WlLT6KG2mCMu
2018/7/21 16:46
質問
DEFについて
COMMON DEFを二度コールすると、
未初期変数を参照した
と表示されます。
どうしたら初期化できますか?

コメント

アバター
あまさとしおん 2018/7/21 16:49 ◆mzDKTVUAtwqE
ソースを載せよう
アバター
突然でてきたBAKA!! 2018/7/21 18:15 ◆EfKewrRlmOns
マヨネ....ゲフンゲフン、あまさとしおんがいってる通りです。
アバター
MIKE猫Soft 2018/7/22 12:58 ◆WlLT6KG2mCMu
sys_libの内容
COMMON DEF DAT_EXT DAT,TP,LEBE OUT B1,B2,B3,B4
ON TP GOTO @BIT,@CHAR,@SHORT,@INTBE,@CHARBE
@BIT
B1=DAT>>(LEBE-1) AND 1
B2=DAT>>LEBE AND 1
B3=DAT>>(LEBE+1) AND 1
B4=DAT>>(LEBE+2) AND 1
RETURN
@CHAR
RGBREAD DAT OUT B4,B3,B2,B1
RETURN
@SHORT
B1=DAT AND &HFFFF
B3=DAT>>16 AND &HFFFF
RETURN
@INTBE
RGBREAD DAT OUT B4,B3,B2,B1
B1=B1 OR (B4<<24) OR (B3<<16) OR (B2<<8)
B2=0:B3=0:B4=0
RETURN
@CHARBE
RGBREAD DAT OUT B1,B2,B3,B4
RETURN
END
startの内容
OPTION STRICT
LOAD "PRG1:SYS_LIB",FALSE
USE 1
VAR DAT%[0]
VAR OTD%[4]
DIM OTS$,HDSZ%,FMT%,TRKNM%,TMDV%,FLUG%,FNM$
INPUT "standard midi file name:";FNM$
LOAD "DAT:TH07_12.MID",DAT%,FALSE '+FNM$,DAT%,FALSE
DAT_EXT DAT%[0],5,0 OUT OTD%[0],OTD%[1],OTD%[2],OTD%[3],OTS$
FLUG%=(OTS$=="MThd")
ON FLUG% GOTO @ERR,@TSK
@ERR
?"ERROR!:Sorry...,This file format is not supported."
WAIT 1000
END
@TSK
? "This file is supported file!"
? "Please wait..."
↓この下の行でエラー発生。
DAT_EXT DAT%[1],3,0 OUT OTD%[0],OTD%[1],OTD%[2],OTD%[3],OTS$
結果的に
Uninitialized variable usedで終了。
対策としては、何か戻り値に値をセットするらしいのですが、意味がよくわかりませんでした。
お願いします。
アバター
こういち 2018/7/22 13:38 ◆ou0jbJnEJ0Kb
@SHORTでB2とB4に何も入ってないのでエラーが出たと思われます。
B2=-1
B4=-1
とか適当な値を代入すればエラーは回避できると思います。(なお-1に深い意味はない)
アバター
say 2018/7/22 13:44 ◆1nbKtD/tFu04
定義の部分の@SHORTでB2,B4が設定されてませんね
あと、戻り値の個数も違いますね(定義では4つ、使用では5つ)
↑個数は合わせなければならない(はず)
アバター
しんいち 2018/7/22 13:51 ◆lHy.hAWXbthn
もしかしたら、DEFのOUTに指定している変数をDEF内で参照しているせいかもしれません。具体的には@INTBEのところでB1,B2,B3,B4が式の右辺に使われているところです。DEF内でローカル変数を定義して、RGBREADのOUTを一旦そのローカル変数に受けてからB1,B2,B3,B4に代入すれば解消するかも。
(いまいち自信がないのは、最新版のプチコンではDEFのOUTに指定した変数もDEF内で参照できるようになってたと思ってたので。昔の版ではできませんでした)

あ、そもそも@SHORTで代入されてない変数があったのか。多分そのせいですね。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -