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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0508
諸熊cmpopt命令のオプション「varinit」を有効にすると、hspinet等使用時にエラーになる9解決


諸熊

リンク

2021/5/8(Sat) 12:51:38|NO.92785

コーディングミスの検知に役立つため、開発時には、未初期化変数をエラーとして教示する「cmpopt」命令の「varinit」オプションを有効にするようにしています。
しかし、これを使用すると、「hspinet」や「mod_regexp」、「encode」などのHSP標準ライブラリーをインクリュードした時、「未初期化の変数があります」エラーが表示されてしまいます。「newcom」などが初期化命令などと見なされていなかったり、初期化不要の変数が指定されたりしているようです。

そこで要望したいのは、公式リリースされるバージョンでは、標準添付されているライブラリーで未初期化変数が検出されないよう、コードを調整して頂きたい、ということです。
該当箇所は主導で修正すれば対処はできるのですが、HSPをバージョンアップする都度修正をしている状況です。また、エラーの原因を特定する際に混乱することがあります。



この記事に返信する


しまくろねこ

リンク

2021/5/8(Sat) 21:05:16|NO.92789

私も同意です。



Y_repeat

リンク

2021/5/20(Thu) 22:10:08|NO.92909

既に知っているかもしれなくて申し訳ありませんが

githubじゃない方のopenHSP(この辺)
http://dev.onionsoft.net/trac/
のtrunk/package/win32/commonに
「hspinet」や「mod_regexp」、「encode」等置いてありますね
packageディレクトリは
最新パッケージ用のデータファイルが格納されています
となっているのでここのファイルを修正すればいいのかもしれません

>該当箇所は主導で修正すれば対処はできるのですが
逆に主導で修正していただければその方が楽かもしれません
誰かが修正しなければいけないのかもしれませんし
その3FILEは合わせてもそんなに行数なさそうですが
しかし
>などのHSP標準ライブラリー
との事でそのバグが広範囲に広がっているなら
なんらかの対策が必要かもしれませんね

openHSPに関して自分はそんなにわかってなくて
どうやれば修正出来るかはわかりませんが
諸熊さんもどうすれば修正出来るのかわからないなら
このスレッドに修正スクリプトを載せれば
わかっている人が反映してくれるかもしれませんね

という訳で
そんなにスキルのない1ユーザーとしての書き込みでした



おにたま(管理人)

リンク

2021/5/22(Sat) 22:17:36|NO.92920

ご指摘ありがとうございます。
未初期化変数の警告は、同梱のモジュールやヘッダでは出ないようにするのが望ましいです。
「hspinet」「mod_regexp」「encode」については今後のバージョンで修正させて頂きます。他にも問題が出るものがあれば、ご報告頂けると助かります。



Y_repeat

リンク

2021/5/23(Sun) 00:55:49|NO.92923

こんばんわ
hspdaのサンプルに
#cmpopt varinit 1
を加えてデバッグすると
rndf.hsp
sortrndf.hsp
のサンプルがエラーでした

csvnote
サンプル動きました
csvstr
サンプル動きました
rndf_get
サンプルエラー
rndf_geti
サンプルエラー
rndf_ini
サンプルエラー
vload
サンプル動きました
vsave
サンプル動きました
vload_start
サンプル動きました
vload_get
サンプル動きました
vload_end
サンプル動きました
vsave_start
サンプル動きました
vsave_put
サンプル動きました
vsave_end
サンプル動きました
xnotesel
サンプル動きました
xnoteadd
サンプル動きました

他の命令はサンプル載ってませんでした



Y_repeat

リンク

2021/5/23(Sun) 02:12:19|NO.92924

mod_regexp.asは
match()
matches
replace
submatch
4つともサンプル動きませんねえ

追記 一応hsp36B5をDLして
mod_regexp.asとhspdaをテストし直しましたが
結果は同じでした
以降hsp36B5で試してます

"mod_img.as"
imgload
サンプル動きません

"mod_joystick.as"
joyGetPosEx
jstick
サンプル動きません

"mod_rss.as"
rssload
サンプル動きません

"mod_fontdlg.as"
fontdlg
サンプル動きません

"obj.as"
getobjsize
objgray
p_scrwnd
resizeobj
4つともサンプル動きません

"zipfile.as"
zipcompress
zipextract
サンプル動きました

なんとなく下の方から命令数少ないっぽいのから試してます
(いっぱいあると辛いのでw)
なんか動くサンプルより動かないサンプルの方が多いので
状況は大変っぽいです



Y_repeat

リンク

2021/5/24(Mon) 00:01:45|NO.92929

hspmath.asの定数等はエラーないっすね
#defineの定数と#constの式のみなので
当然っちゃ当然ですね
以下単体テストです
値はなんとなくエラーじゃないっぽいのです
サンプルのスクリプトはコピペです


#cmpopt varinit 1 #include "hspmath.as" logmes M_E logmes M_LOG2E logmes M_LOG10E logmes M_LN2 logmes M_LN10 logmes M_SQRTPI logmes M_SQRT2 logmes M_SQRT3 logmes "----------------------" logmes DBL_DIG logmes DBL_EPSILON logmes DBL_MANT_DIG logmes DBL_MAX logmes DBL_MAX_10_EXP logmes DBL_MAX_EXP logmes DBL_MIN logmes DBL_MIN_10_EXP logmes DBL_MIN_EXP logmes "----------------------" logmes INT_DIGIT logmes INT_DIGIT10 logmes INT_MAX logmes INT_MIN logmes "----------------------" logmes ""+acos(0.2) logmes ""+acosh(0.2) logmes ""+asin(0.2) logmes ""+asinh(0.2) logmes ""+atanh(0.2) logmes ""+ceil(-10) logmes ""+cosh(0.2) logmes ""+floor(10) logmes ""+fmod(3.5,1.2) logmes ""+intf(12.4) logmes ""+log10(1.2) logmes ""+log2(1.2) logmes ""+pow(3,3) logmes ""+round(1.2) logmes ""+sgn(-10) logmes ""+sinh(0.2) logmes ""+tanh(0.2) //distance2 point_a = 100, 50 // 点A point_b = 500, 400 // 点B mes "2点間の距離は" + distance2(point_a, point_b) + "です。" line point_a(0), point_a(1), point_b(0), point_b(1) color 255 : pset point_a(0), point_a(1) // 点A color ,255 : pset point_b(0), point_b(1) // 点B //isfinite mes isfinite(10) // 有限の値 mes isfinite(sqrt(-1)) // 非数 mes isfinite(expf(100)) // 有限の値 mes isfinite(expf(1000)) // 無限大 //isnan mes isnan(10) // 有限の値 mes isnan(sqrt(-1)) // 非数 mes isnan(expf(100)) // 有限の値 mes isnan(expf(1000)) // 無限大 stop



Y_repeat

リンク

2021/5/24(Mon) 00:17:32|NO.92930

hsptv.as
hsptv_getrank
hsptv_up
TESTしました

sample\hsptv\ hsptv_test.hsp
は最初動かなかったんですが
hsptv.asは何回か使ったことがあるので
hsptv_test.hspを少々書き直したら
hsptv_getrank
hsptv_up
は動きました
hsptv_test.hspにvarinit 1のバグがあるみたいですね

今までTESTしたサンプルも
asファイルにvarinit 1のバグがあるのと
サンプル自体にvarinit 1のバグがあるのがありそうです



Y_repeat

リンク

2021/5/24(Mon) 00:42:25|NO.92931

hsptv.asに関するsampleをデバッグしました
デバッグというか変数を利用する前に
0か空文字を入れただけです
これで動くと思います

sample\hsptv\ hsptv_test.hsp

#cmpopt varinit 1 #include "hsptv.as" score=1000 sdim comm,64 mes "HSPTVデータの更新登録テスト" hsptv_up -1,"" ; 最初に情報を更新しておく gosub *update ; ランキング情報の表示 pos 500,32:objsize 120,24 mes "スコア" input score mes "コメント" input comm button "更新",*send button "終了",*ok stop *send hsptv_up score, comm gosub *update stop *ok end *update color 255,255,255 boxf 0,32,500,480 ; 背景をクリア color 0,0,0 pos 0,32 repeat 10 ; 上位10位のみ表示 rscore=0 : ruser="" : rcomm="" hsptv_getrank rscore,ruser,rcomm,cnt ; 情報を取得する rank=cnt+1 mes "#"+rank+":"+rscore+"("+ruser+") " mes " コメント:"+rcomm loop return

sample\hsptv\ hsptvapp_test.hsp

#cmpopt varinit 1 #include "hsptvapp.as" title "HSPTVデータの更新登録テスト" mes "お待ちください..." hsptv_start "" ; ネット接続時にはスタートアップコードを指定します score=1000 u_name = "" : u_key = "" : u_adr = "" : u_port = "" sdim comm,64 hsptv_up -1,"" ; 最初に情報を更新しておく *main cls gosub *update ; ランキング情報の表示 pos 500,32:objsize 120,24 mes "スコア" input score mes "コメント" input comm button "更新",*send button "設定",*info button "終了",*ok stop *send ; スコアを更新 ; hsptv_up score, comm goto *main *update ; スコア表示のサブルーチン ; pos 0,32 repeat 10 ; 上位10位のみ表示 rscore = 0 : ruser="" : rcomm = "" hsptv_getrank rscore,ruser,rcomm,cnt ; 情報を取得する rank=cnt+1 mes "#"+rank+":"+rscore+"("+ruser+") " mes " コメント:"+rcomm loop return *info ; ユーザー情報設定画面 ; hsptv_getini u_name,0 ; ユーザー情報(名前) hsptv_getini u_key,1 ; ユーザー情報(キー) hsptv_getini u_adr,2 ; ユーザー情報(PROXYアドレス) hsptv_getini u_port,3 ; ユーザー情報(PROXYポート) ; cls mes "ユーザー設定" pos 0,32 objsize 240,24 mes "ユーザーネーム:" input u_name mes "ユーザーキー:" input u_key mes "PROXYアドレス:" input u_adr mes "PROXYポート:" input u_port objsize 120,24 button "OK",*save button "キャンセル",*main stop *save ; ユーザー情報を保存 ; hsptv_setini u_name,0 ; ユーザー情報(名前) hsptv_setini u_key,1 ; ユーザー情報(キー) hsptv_setini u_adr,2 ; ユーザー情報(PROXYアドレス) hsptv_setini u_port,3 ; ユーザー情報(PROXYポート) hsptv_saveini goto *main *ok end

sample\hsptv\ hsptvapp_test.hsp
sample\hsptvapp\ hsptv_test.hsp
の二つのサンプルの内容が同じになってますね

デバッグ書き込みに関しましては
人間がすることですから
操作ミスコピペミス等
紛れ込む可能性について
先に謝っておきます



Y_repeat

リンク

2021/5/24(Mon) 00:52:57|NO.92932

hspda.as
> rndf_get
> サンプルエラー
> rndf_geti
> サンプルエラー
> rndf_ini
> サンプルエラー
これらのエラーもasのエラーではなく
sample\hspda\ rndf.hsp
のエラーでした
ちゃちゃっと使用前に0.0入れておけば動きました
サンプルの警告に関しましては
取り除くべきか 楽な記述が良いのかはわかりません


#cmpopt varinit 1 #include "hspda.as" ; 実数の乱数生成 ; rndf_ini ; 乱数の初期化(なくてもOKです) ; mes "実数で0〜1までの乱数を生成します。" dval = 0.0 repeat 20 rndf_get dval mes "MTRND="+dval loop x = 0.0 : y = 0.0 : col1 = 0.0 : col2 = 0.0 : col3 = 0.0 repeat rndf_geti x,300 rndf_geti y,300 rndf_geti col1,0x100 rndf_geti col2,0x100 rndf_geti col3,0x100 color col1,col2,col3:pset 320+x,y await 20 loop



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