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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0315
wlサブルーチンでrepeat中にreturn3解決


wl

リンク

2021/3/15(Mon) 04:18:32|NO.92477

独り言という項目があったので独り言です


repeat 1 gosub *l loop stop *l repeat 2 mes cnt return 0 loop return

これの仕様でハマった(qiitaでみんな言ってるやつ)
サブのリピートが1回残ってるのにreturnして
メインのリピートの尻でサブのリピートの頭に戻っちゃって「サブルーチン外returnすんな」
これがより複雑な形で表れたわよ

これ結構やってたので、やらんほうがいいんですねやっぱり。今までよく動いてたな。

cとかだと、for中にreturnするの普通にやるイメージがあって、
「綺麗じゃないけど、ちょっと判読性(可読?)が落ちる」程度にしか思っていなかったけれど、
hspでは完全にアウトですね。cでもアウトなのか・・・?



この記事に返信する


Riv

リンク

2021/3/15(Mon) 05:16:53|NO.92478

独り言に突っ込みます。

retu = 0 // 一応宣言します *main repeat 1 gosub *subr loop stop *subr repeat 2 mes str(cnt) // 話がそれるので省略 if ( cnt == 0 ) { // ここの条件を変えればよそでも使えるはずです retu = 1 break } loop if ( retu == 1 ) { retu = 0 return 0 } return
おそらく、「repeat」を途中で抜ける「break」によって抜け出し、
対応する「loop」の直後に、「if」などで分岐させた方が安全でしょう。

>cとかだと、for中にreturnするの普通にやるイメージがあって、

「難しい物事を考えること」が得意でない方などはやっていてもおかしくないかもです。
CやC++などでもHSPrcsrでも、決して簡単な問題ではないと思いますが、
安全性をとるなら「for中にreturnする」ことをしない方がいいかも知れません。
一度「for」や「repeat」を抜けてから「return」するのが基本ですし、
様々なパターンを検証する気が無ければ、
1つ1つをしっかり完了していく形の方が無難かと。

>cでもアウトなのか・・・?

少なくとも私には分かりませんし、今すぐ手元で調べることはできません。



ppp

リンク

2021/3/15(Mon) 12:04:00|NO.92483

>wlさん
repeatは割と面倒な仕様があるのでforマクロを使うほうが安全ではあるよ。


>HSPrcsrでも
お前ツイッターでおかしなタグ流行らそうとしてる奴だろ。HSPrcsrってなんだよ。
そんな言語ないんだよ。ただでさえ検索汚染されてるおかげで面倒なのに
余計に混乱させるような気持ちの悪いの広めようとすんなよ。



Riv

リンク

2021/3/15(Mon) 22:12:49|NO.92485

>HSPrcsrってなんだよ。
この件はTwitterで複数の方にご指摘いただきました。
確かに私が軽率だったと思い反省しているので、
今後はその語句の使用を控えることにします。
また、検索汚染の件もできるだけ注意します。



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