>Drip氏
申し訳ありません
実は(も何も、提示したプログラムは何の益にもならない物であることは明らかですが)
ゲームの画像処理を行う上で組み上げていたプログラムをシェイプし
問題部分のみを切り出した物で、dialogで変数内容を確認する部分をgosubで急造したのです
無論の事、本来ならばこのような愚行はしません。
数年前からHSP周りのコミュニティも覗かず
マニュアルとにらめっこしながら我流で場数を踏んできたため
やはりプログラマとしての常識が欠けているようです。
急造とはいえこのような軽薄なプログラムを提示し
当惑させてしまった事をお詫びします。そして丁寧なアドバイス、有難うございます
>tks氏
発言を聞いて初めて配列変数の指定方法がC似のこの方式に変更されていることを知りました
3.1正式版のマニュアルの配列変数の項にもしっかり書いてありますね
自分の環境では何故か従来の方式しか通じないようですが……
HSPBT#177、というのはバグトラッキングの177番の記事の事、でよろしいでしょうか?
自分の知識の程度では今一つ理解したとは言えませんが、感覚として
新旧の仕様が混在する過渡期に必然する"仕様”としてあきらめた方が良さそうだと思いました
わざわざ調査までして頂き、有難うございます。
現状作ってるソフトは3.0の仕様に合せて製作しているものなので
自分としては3.0でコンパイルすれば解決、なのですが
この際なので判り易い(そして不可解な要素の無い)
検証用のプログラムを目指して改めて組んでみました
;---- テスト用フラグの定義
;#const global repeatUseF ;---- 直接指定していたところをrepeatのcntで指定する
;#const global numUseF ;---- 変数kで指定していたところを変数numで指定する
dim test,4,4
;---- 本文
goto *start
#deffunc dialogHyouji ;---- テスト用に挿入したdialog表示
string = ""
repeat 4: i = cnt: strLine = ""
repeat 4: strLine += " " + test@.cnt.i: loop
string += "\n"+ strLine
loop
dialog string
return
#module
#deffunc dainyuTest
repeat 4
#ifdef repeatUseF
repeat 4: test@.cnt.k = rnd(256): loop
#endif
#ifndef repeatUseF
#ifdef numUseF
test@.0.num = rnd(256): test@.1.num = rnd(256): test@.2.num = rnd(256): test@.3.num = rnd(256)
#endif
#ifndef numUseF
test@.0.k = rnd(256): test@.1.k = rnd(256): test@.2.k = rnd(256): test@.3.k = rnd(256)
#endif
#endif
dialogHyouji
#ifdef numUseF
num++
#endif
#ifndef numUseF
k++
#endif
loop
return
#global
*start
dainyuTest: dialog "最終結果" :dialogHyouji
end
プリプロセッサ命令で余計にごちゃごちゃになってしまったような気も致しますがorz
「どこまで無駄を省けるか」と追求していく内に、私が当初訴えていた「バグのような現象」が
非常に稀な現象である事が改めて判りました。
テスト用フラグのどちらか一つ(両方つけると意味の無い挙動しかしません)を定義した場合
正式版(と私の環境)でも目論見どおりの動作をします
状況があまりに特殊ですし、バグとして取り除く必要もなさそうだと私個人としては思います
本当にありがとうございました
解決表示にしていますが、支障が無ければ引き続き、指摘等があればしっかり拝見させて頂きます