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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1127
#enumについての質問10解決


リンク

2006/11/27(Mon) 03:30:00|NO.3790

#enumの正体がわかりません。
どうして以下のようになるのでしょうか?

#enum a

これは以後、a=0として扱われますよね?実際そうです。
#enum a=1
これは以後、a=1として扱われますよね?実際そうです。

#enum a b=1

これは、a=1, b=1にはならないのですか?実際はa=0, b=0です。
#enum a b
#enum c d
これは、a=0, b=0, c=1, d=0になります。

#enum a b=1
#enum c d
これはa=0, b=0, c=1, d=0となります。

#enum a b=1
#enum c
これはa=0, b=0, c=1となります。

#enum global NULL=1
#enum CMD_OPEN
サンプルスクリプト"menubar.hsp"より
これはglobal=0, NULL=1, CMD_OPEN=2となります。
1つ上のやつと、文字が違うだけなのに。。。
ちなみにこれは、
#enum global b=1
#enum c
と置き換えることも可能です。

ええっと、結局聞きたいのは、#enumはどんなことをするのかです。



この記事に返信する


Yuki

リンク

2006/11/27(Mon) 03:52:00|NO.3791

#enum a b

という使い方はありません。
ヘルプにも書いてありませんが、どこから出てきたのでしょうか?

#enum global a

の global はおそらく #define の global と同じ効果と思われます。
ヘルプで global で検索すると出てくる #define の項に説明があります。
#enum でも使えるとは書いてないので、バグかヘルプの記述漏れでしょう。



リンク

2006/11/27(Mon) 04:04:59|NO.3793

サンプルスクリプトのmenubar.hspに、
#enum global NULL=0
とあるのです。
コピペですので、小生の間違えではないと思います。



リンク

2006/11/27(Mon) 04:34:28|NO.3795

ああ、補足します。私は、サンプルスクリプトを見て、#enumの存在を知りました。
しかし、そこには#enum global a=0などと言う書き方は載ってません。
そこで色々と実験を繰り返したのです。



リンク

2006/11/27(Mon) 04:36:07|NO.3796

補足に対して訂正。

>しかし、そこには#enum global a=0などと言う書き方は載ってません。

>しかし、ヘルプには#enum global a=0などと言う書き方は載ってません。



Irisawa

リンク

2006/11/27(Mon) 08:02:48|NO.3800

#enumはCでいうところの列挙型に似ている(?)ものですが、単純な定数に置き換えている
だけなので実質は#defineや#constとほぼ同じと見ていいでしょう。

違うのは最初に数値を指定することであとは数値を省略すると自動的に順番に+1と増やして
いきます。
以下のコードは基本的に同等の動作です。

; #define
#define ONE 1 #define TWO 2 #define THREE 3 mes " ONE = " + ONE mes " TWO = " + TWO mes "THREE = " + THREE stop
; #const
#const ONE 1 #const TWO 2 #const THREE 3 mes " ONE = " + ONE mes " TWO = " + TWO mes "THREE = " + THREE stop
; #enum
#enum ONE = 1 #enum TWO #enum THREE mes " ONE = " + ONE mes " TWO = " + TWO mes "THREE = " + THREE stop

で、Yukiさんも指摘しているとおりに#numに


#enum a b=1

このような書式はありません。
もし、これでエラーにならず動作しているようなら不具合です。
上記のような記述をした場合はエラーになるべきです。


#enum global NULL=1 #enum CMD_OPEN

これはNULL=1, CMD_OPEN=2です。
前のglobalはglobal指定を指すものであり、globalという変数を別に指定していなければ
当然代入をしていない変数なので内容は0です。



Irisawa

リンク

2006/11/27(Mon) 08:05:48|NO.3801

因みに定数なので変数のように代入は出来ません。



うひょ

リンク

2006/11/27(Mon) 16:14:58|NO.3802


#enum a b=1
は、不具合ではなく

b=1
が式として扱われてbという定数は無い(0の)ため0となったのではないのでしょうか?

下のスクリプトで確かめるとcは1になっています。

#enum a b=1 #enum c b=0 dialog "a="+a dialog "c="+c



リンク

2006/11/27(Mon) 19:46:48|NO.3803

ああ、ではglobalはないのですね。
わかりました。ありがとうございました。じゃぁサンプルスクリプトの問題でしたか。



リンク

2006/11/27(Mon) 19:47:30|NO.3804

ごめんなさ、解決のところにチェックを入れればいいんですよね?



Irisawa

リンク

2006/11/27(Mon) 22:36:39|NO.3808

>>うひょさん
少なくても仕様上は、そのような記述はなく、もし動作してしまっていてもそれは誤動作
です。
仕様外の動作であり、正しい記述をちゃんとチェックしていないということになるわけです
から結果的に不具合です。

想定外の動作をしている以上、どのような問題があるかも不明なのでこれは修正されるべき
でしょう。
もし、動作上になんの問題もないというのなら仕様内に入れてもいいのかも知れませんが。



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