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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0612
丙午(へいご)”#deffunc”命令でエラーが……7解決


丙午(へいご)

リンク

2008/6/12(Thu) 10:11:47|NO.16668

#deffunc命令の使い方について質問です。

#deffunc命令を用いて新規命令を定義する記述をする際に、ヘルプの
“実行は gosub命令と同じくサブルーチンジャンプとして行なわれ、return命令
でもとの実行位置に戻ります。”
の説明に従い、#deffuncの後にreturnを入れているのですが、そうすると実行した際に
「サブルーチン外でのreturnは無効です。」というエラーが表示されてしまいます。

次のようなスプリクトを組んでテストしてみましたが、やはり上述のエラーが表示され
てしまいました。
#deffunc test_of_deffunc
dialog "deffunc test"
return
*Main
test_of_deffunc
stop

バグの可能性も考えられたのですが、自分のミスのせいかもしれないので質問とさせて
いただきました。ご返答のほど、よろしくお願いいたします。



この記事に返信する


レヴィン

リンク

2008/6/12(Thu) 11:03:35|NO.16669

先頭行に
goto *main

で一応回避できます。 これ以外の方法ってあるのかな?



シンバル

リンク

2008/6/12(Thu) 11:18:37|NO.16670

#module
#deffunc test_of_deffunc
dialog "deffunc test"
return
#global

*Main
test_of_deffunc
stop

モジュールの領域は、#module〜#globalで囲まないといけません



通りすがり

リンク

2008/6/12(Thu) 20:11:05|NO.16676

変数kekkaに値を返す命令を作った場合は
#module〜#globalで囲むと結果が返されませんね。当然と言えば当然ですが…

結果を返す変数を指定、もしくは結果を返さない命令を作るなら囲めばいいですし、
自分しか使わないような、決まった変数に値を返すのならgotoで回避でしょうか。



丙午(へいご)

リンク

2008/6/12(Thu) 22:14:26|NO.16682

16669さん、16670さんの対処法を試したところ、その両方で解決できました。
ありがとうございます。

#deffuncはモジュール領域内で使わないといけないんですねぇ……。
そうならそうとHSPスプリクトエディタの命令索引の説明にも書いてほしいな。



ANTARES

リンク

2008/6/12(Thu) 22:20:58|NO.16683

>#deffuncはモジュール領域内で使わないといけないんですねぇ……。
 そういうわけでもないようです。
docs\hspprog.htmの「3.拡張文法」の「モジュール」をご覧ください。

ついでなので、↑を見て投稿をやめたレスを書いておきます。

>自分しか使わないような、決まった変数に値を返すのならgotoで回避でしょうか。
 #module〜#globalで囲んで変数名の後に「@」をつけるという回避方法もあります。



シンバル

リンク

2008/6/13(Fri) 10:27:44|NO.16686

モジュールではなく、#deffunc命令についての質問でしたか。
早とちりで混乱させてしまったようで、すみません


#module #deffunc test var p1 p1 = "い" return #global a = "あ" print a test a print a

ちなみにモジュールでは、@以外にも
varにすることで、クローン変数みたいなこともできます。



レノス

リンク

2008/6/13(Fri) 23:33:28|NO.16695

大切な部分が抜けているので追記。

最初のスクリプトの実行する順番は、次のようになります。

dialog "deffunc test" return ; main test_of_deffunc stop

# から始まる命令とラベルは、実行時に無視されるので、
開始直後に return してしまっています。

この場合、必ず #module 〜 #global か goto で飛ばします。



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