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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0712
Mizki_FHSP3.1でのマクロについて5未解決


Mizki_F

リンク

2006/7/12(Wed) 16:31:31|NO.1331

>>おにたまさん
3.1β4の開発お疲れ様です。

ところで、プリプロセッサが自動的に追加するマクロについての疑問なのですが、
「__hsp30__」はHSP3.1が正式版になった場合は「__hsp31__」になるのでしょうか?
それとも、「__hsp30__」のままなのでしょうか?



この記事に返信する


Mizki_F

リンク

2006/7/26(Wed) 18:49:35|NO.1577

すみません、「__hspver__」についても疑問が出てきました。
HSP 3.0aでは__hspver__は「0x0300」ですが、3.1β4,β5では「0x3001」となっています。
今後メジャーバージョン情報は「0x30」になるのでしょうか?
何か情報がありましたら、よろしくお願いいたします。



kz3

リンク

2006/7/27(Thu) 12:38:01|NO.1588

おにたまさんに対する質問だったらメールのほうが...。( 返信の保障は出来ませんけど )

>「__hsp30__」はHSP3.1が正式版になった場合は「__hsp31__」になるのでしょうか?
ならないと思う...。
これは多分、「HSP3」かどうかを識別するためのものだと思います。
hsp3.1になっても「HSP3」には変わりないので...。

>HSP 3.0aでは__hspver__は「0x0300」ですが、3.1β4,β5では「0x3001」となっています。
なっていますね。
これが間違いか、仕様変更かのヒントはマニュアルに書いてあります。

>hspprog.htmより
> __hspver__ HSPバージョン番号(*)
>*16進数で上位8bit、下位8bitがメジャー・マイナーバージョンを示します。

この「16進数」というのは多分「16bit」の間違いだと思います。
16進数の上位、下位と言われても、全体が何bitなのか分からないと上位も下位も分かりません。
「16bit」と読み替えると __hspver__ が $3001 だと「hsp30.1」と解釈されるので多分間違いかなと思います。

あとHSPのバージョン関連ではシステム変数に hspver というものがありますが、
これは「3.x」を「$3???」でメジャーとマイナーバージョンを表すみたいです。

これを考慮すると 旧__hspver__の表し方が、hspverの表し方に変更された、とも言えます。

ちなみに実行中のスクリプトの内部(HSPEXINFO)にもバージョンとマイナーバージョンに関する2つの16bit数値が存在しますが、何が何やら。以下にまとめます。

version = "hspver", "バージョン", "マイナーバージョン"
hsp3.1b3 = $301F, $3001, $001E
hsp3.1b4 = $301F, $3001, $001F
hsp3.1b5 = $3021, $3001, $0020

バージョンとマイナーバージョンを 'or' したものが hspver になっているような...

__hspver__ は正式リリース版のバージョンコード( 3.1b5は3.1正式リリースに向けられたものだから「$3001」 )
hspverはβ版も含んだバージョン...( 3.1b4 と 3.1b5 は同じ値ですが )なのかなぁと考えたりします。

# hspver がどういうロジックで値を決定しているのか分からないのでデバッグウィンドウが...



Mizki_F

リンク

2006/7/27(Thu) 14:05:07|NO.1589

> おにたまさんに対する質問だったらメールのほうが...。( 返信の保障は出来ませんけど )

確かにそうでしたね。
言われるまで気付きませんでした(^^;

>>「__hsp30__」はHSP3.1が正式版になった場合は「__hsp31__」になるのでしょうか?
>ならないと思う...。
>これは多分、「HSP3」かどうかを識別するためのものだと思います。
>hsp3.1になっても「HSP3」には変わりないので...。
「__hsp3__」という表記だったら自分もそう判断したのですが…
まぁ多分変わらないだろうとは思いますが、一応気になったもので。

>バージョンとマイナーバージョンを 'or' したものが hspver になっているような...
ヘルプを見ると、

>HSP のバージョン番号が代入されます。バージョンコード + マイナーバージョンコード
>の値になります。(3.0 は $3??? になる)

とありますので正しいと思います。(β4だけおかしい?)
hspverの方は「バージョンコード」という表記なので疑問に思わなかったのですが、
__hspver__は「上位、下位8bit」という表記だったので、これで正しいのかな?と思った
訳です。

プリプロセッサの処理をするときに__hspver__を使う必要があるので、法則が分からないと
ちょっとツライかなと…



kz3

リンク

2006/7/27(Thu) 15:56:32|NO.1590

__hspver__ を使うということは条件付コンパイルをするんだと思いますが、
次のようにすることで「__hspver__」=>「$3001」で無くなったときも最小限の修正で済むと思います。

#define MY_VER30 $3000 ; hsp3.0 #define MY_VER31 $3001 ; hsp3.1 #if __hspver__ <= MY_VER31 mes "3.1以下で動きますよ" #endif #if __hspver__ < MY_VER31 mes "3.0で動きますよ" #endif #if __hspver__ = MY_VER31 mes "3.1しか動きませんよ" #endif



Mizki_F

リンク

2006/7/27(Thu) 16:38:14|NO.1593

3.0、3.1両方に対応するコードを書いていたときに気になっただけですので…
結局は__hspver__が0x0300より大きいかどうかで判断できるので、問題にはなってません。

#if __hspver__ > 0x0300 #cmpopt ppout 1 #cmpopt optcode 1 #cmpopt optinfo 0 #endif
ただ、やっぱり統一されて無いと気にはなりますが(^^;



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