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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0706
久し (投稿者削除)9解決


久し

リンク

2015/7/6(Mon) 06:28:05|NO.69974

この記事は投稿者により削除されました。
2015/7/16(Thu) 15:14:28



この記事に返信する


kanamaru

リンク

2015/7/6(Mon) 08:19:54|NO.69976

こちらで実行してみると確かに呼び出す前に定義するとコンパイルエラーになります。

#module test #deffunc local localfunc2 mes "localfunc" return #define global localfunc localfunc2@test #deffunc testfunc localfunc return #global testfunc
などとするのはどうでしょう。



久し

リンク

2015/7/6(Mon) 22:47:09|NO.69982

>>kanamaruさん
ありがとうございます。
ですがそれだと localfunc がグローバルになってしまうので、
ローカル関数になっていません。

よく分からないですが、とりあえず毎回 @モジュール を付けて呼び出すことにします。



暇人

リンク

2015/7/6(Mon) 23:21:14|NO.69983

>ですがそれだと localfunc がグローバルになってしまうので、

>#define global localfunc localfunc2@test
のglobalを外せば良い

#module test #define localfunc _localfunc@test #deffunc local _localfunc mes "localfunc" return #deffunc testfunc localfunc return #global testfunc



玄冬

リンク

2015/7/8(Wed) 01:48:48|NO.69991

こんなスレッドが過去スレにあるんですが、まぁ誰も覚えてはいないでしょう

http://hsp.tv/play/pforum.php?mode=pastwch&num=35805



久し

リンク

2015/7/13(Mon) 12:23:00|NO.70102

スレッド上げてしまってすみません

>> 玄冬さん
過去スレのほうを見させていただきました
結局バグなんだか仕様なんだかよく分かりませんね
つまるところ、local命令はモジュール内外問わず
@module名をつけて呼び出せってことですかね。

とりあえずグローバル汚染を避けたいというのが
localにする目的なので、そのようにしたいと思います。



zakki

リンク

2015/7/13(Mon) 22:52:38|NO.70112

後ろで定義された関数だと@module無しで呼べるのは意図的っぽいです。
プリプロセスフェーズだけではなくて、コード生成フェーズでもモジュールローカル定義も探すようにすれば上でも下でも@module無しで呼べそうに見えますがどうなんでしょう。

http://dev.onionsoft.net/trac/openhsp/browser/trunk/hspcmp/token.cpp#L3483



久し

リンク

2015/7/14(Tue) 01:39:15|NO.70116

>>zakkiさん
情報提供ありがとうございます。
なるほど、確かに呼び出しより後ろで定義されたローカル関数を
@module名なしで書いても、プリプロセッサ出力では
@module名が補われていました。
それにしても、関数の定義の位置関係に依存して動くとか動かないとか
決まるってのは言語仕様的にどうなんでしょう。

あと次のスクリプト

#module mod #deffunc test myfunc return // ローカル関数 #deffunc local myfunc mes "local myfunc in mod" return #global #module mod2 // グローバル関数 #deffunc myfunc mes "myfunc in mod2" return #global test
を実行して"myfunc in mod2"が表示されるというのも
直感に反しますね。
毎回@module名を付けたほうが安全な気がしてきました。



kanamaru

リンク

2015/7/14(Tue) 07:15:08|NO.70119

仕様的には問題ないと思います。
C言語にも似た仕様があったと記憶しているので。



久し

リンク

2015/7/14(Tue) 07:56:41|NO.70120

プロトタイプ宣言のことですか?
あちらはコンパイル言語だから仕方ないにしても、
HSPはスクリプト言語ですからその辺りは
コンパイラの改良によって何とかなると思うのですが…。



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