HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
1128
tkznifの限界について0解決


tkzn

リンク

2022/11/28(Mon) 22:10:16|NO.97405

以下のコードを実行すると、予想に反して
「aaa」
と表示されます。


1行目if(0){ 2行目 mes "aaa" 3行目 stop 4行目 stop 5行目 stop ⋮ ⋮ 10922行目 stop 10923行目 stop 10924行目 stop 10925行目 } 10926行目 mes "abc"

一方でstop命令を一つコメントアウトした以下のコードを実行すると、
「abc」
と正しく表示されます。


1行目if(0){ 2行目 mes "aaa" 3行目 // stop  4行目 stop 5行目 stop ⋮ ⋮ 10922行目 stop 10923行目 stop 10924行目 stop 10925行目 } 10926行目 mes "abc"

これはHSPの中間コードにおいて、if命令は偽のときのコードセグメントのジャンプ先を16bitの相対オフセット値で保持しているのですが、
ifの中に多量の命令があると、16bitでは収まらずオーバーフローしてしまい本来は10926行目にジャンプしなければならないところを2行目にジャンプしてしまいます。
現実的にifの中にこれほどの命令を記述することはないでしょうから、実用上の問題はないとは思いますが、興味深い現象でしたので報告いたします。

検証用コードはこちらです。
https://github.com/takazin11de/if_test/blob/main/it_test.hsp



この記事に返信する


ONION software Copyright 1997-2023(c) All rights reserved.