プレイ日記
自作命令とそれに関するグローバル変数を纏めて記述していると、変数の宣言がまばらになることがある。そうすると、とある変数が宣言以外の処理を宣言より先に行ってしまい、変数の型が可笑しくなることがある みたいなんだけど、イマイチ理由が分からない。
3そうだね
プレイ済み
返信[1]
親投稿
というわけで、簡略化して考えてみる。 多分こんな感じ。 LEN(ZUNDOKO%)でタイプミスマッチ
0そうだね
プレイ済み
返信[2]
親投稿
ΖΕΧ ZEX256
変数の宣言は使用するより 上で 宣言しなければならない。 使用するより 先に ではないので注意。 そこがプチコンの特殊なところ。
2そうだね
プレイ済み
返信[3]
親投稿
ΖΕΧ ZEX256
一応指摘しておくと2行目の変数ZUNDOKO%のこと
0そうだね
プレイ済み
返信[4]
親投稿
実際にプチコンでコンパイルするときは、ルーチンとかでの移動関係なしに上から調べるからでしたっけ だとしても、先程の例で実行すると、エラー吐くのはAが呼び出されてからなんですよね。こういうのってコンパイル時にエラー吐くものでは無いのですか? 仕様を把握する前に、先にエラー回避しつつ、小分けされた自作命令フォルダを書くように編集。
1そうだね
プレイ済み
返信[5]
親投稿
OPTION STRICTつけてないから 変数を用意してみたもののプログラマの予定していた型とあわなくてエラーになったのかもしれません
0そうだね
プレイ済み
返信[6]
親投稿
myu314 myu314
半分くらいはOPTION STRICTで解決するけど、もう一点ハマりやすい仕様があって。 配列定義は実行された時に初めて領域が確保されます。それまでは要素数0の配列扱い。で、要素数が0の配列は何故かLENできないので下のプログラムはタイプミスマッチ…このエラーはどうなのかって感はあるけど。 FUNC VAR X[10] DEF FUNC ?LEN(X) END ライブラリとか作る場合、この仕様にハマりがち。 サブルーチンか初期化関数を作って使う前に初期化してもらうのが基本。
2そうだね
プレイ済み
返信[7]
親投稿
おかげでDIM ITEM[I_MAX]みたいに変数で要素数が決められるんだけどね… 名前の登録(?)は流れ無視の行数順で 要素数の決定は実際の流れ通り えらくややこしい仕様になったもんだね。
0そうだね
プレイ済み
返信[8]
親投稿
私がしょっちゅう引っ掛かってたのはそのタイプミスマッチのやつですね……多分 便利なのか不便なのか不明ですけど、仕様についてはなんとなく分かってきた気がします。 ありがとうごさいました。
1そうだね
プレイ済み
返信[9]
親投稿
myu314 myu314
ごめん!ちょっと嘘つきました。 VAR X[0]:?LEN(X)はエラーにならないですね、なんか間違えて覚えてました。宣言のとこ通るまではきちんと初期化されないということには変りないので、エラー原因とかは上で書いた通りですが。 あと宣言してるだけで確保しちゃうとメモリ使用量の面で問題がでそうだから、仕様としては妥当なとこだと思いますよ:)
0そうだね
プレイ済み