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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1004
ひらまるマクロによるマクロ定義7解決


ひらまる

リンク

2010/10/4(Mon) 16:34:42|NO.35235

マクロを取り消して 同名のマクロを登録する
#undef Test
#define Test 10
を1行でやりたいので 以下のようなスクリプトを組んだのですが、

#define undefine(%1,%2) #undef %1 %c #define %1 %2 undefine Test, 10 mes Test
エラーは出ないが「Test」が変数として扱われ、undefineの行が無視されます。

何かを見落としているのか…
それとも #define はマクロに登録できないのか…
どなたか教えていただけないでしょうか。



この記事に返信する


KA

リンク

2010/10/4(Mon) 23:52:33|NO.35237

文法的に使えるのかは別にして・・・

undefine Test, 10

を実行しようとしても、取り消し前の Test が働くような気がします。



ひらまる

リンク

2010/10/5(Tue) 01:14:42|NO.35238

それだ……

#define Test 10 #define undefine(%1,%2) #undef %1 %c #define %1 %2 undefine Test, 100 mes Test
↑の結果が「10」になるのは
undefine Test, 100 → undefine 10, 100
に近いことになっているのか…
じゃぁ…解決策は…ううん…;



SYAM

リンク

2010/10/5(Tue) 10:10:10|NO.35240

なんで1行でやりたいのか、とか
それを1行にすることで何がしたいのか、が分かったら、
1行にはできなくても
目的を果たす代案を誰かが思いつくかもしれません。よ。



ひらまる

リンク

2010/10/5(Tue) 17:53:40|NO.35242

1行でやりたい理由はもちろん
記述が楽だし すっきりするからです!
たとえば

sdim note notesel note noteload "note.txt" noteunsel mes note


#module #defcfunc noteload2 str _FileName sdim note notesel note noteload _FileName noteunsel return note #global mes noteload2( "note.txt" )
としてしまうのと同じような心理です。

が、どうやら「#define」はマクロとして登録できない(?)
ようなので「#undef」と「#define」1行に記述するのは無理なのでしょうか…



ひらまる

リンク

2010/10/5(Tue) 18:09:59|NO.35243

以下のような場合

#module #defcfunc 猫 int _引数 変数1 = _引数 mes "犬 = " + 犬( 20 ) return 変数1 #defcfunc 犬 int _引数 変数1 = _引数 return 変数1 #global mes "猫 = " + 猫( 10 )
「猫」は引数を表示する関数なのですが
「犬」でも同じ変数を利用しているため
「猫」の中で「犬」を呼んだときに「猫」の(モジュール内で共有の)変数1が変化してしまいます。
そこで

#module #defcfunc 猫 int _引数 #undef 変数1 #define 変数1 猫さんの変数 dim 猫さんの変数 変数1 = _引数 mes "犬 = " + 犬( 20 ) return 変数1 #defcfunc 犬 int _引数 #undef 変数1 #define 変数1 犬さんの変数 dim 犬さんの変数 変数1 = _引数 return 変数1 #global mes "猫 = " + 猫( 10 )
として、
「猫」の中の「変数」は、「猫さんの変数」という変数を指すようにして、
「犬」の中の「変数」は、「犬さんの変数」という変数を指すようにしたいと思います。

なぜ「変数」という記述にこだわるのか。
最初から「猫さんの変数」を使えば良いじゃないかと思うかもしれませんが、

実際の「猫」や「犬」は
「大熊デストロイバーソロミュー猫侍RevisionⅡ」や
「シベリアンモンゴリアンデロリアンワンコ鍋犬」のような長い名前なので、
「大熊デストロイバーソロミュー猫侍RevisionⅡさんの変数」などという記述をすると
とても見づらくなってしまうのです。

なんとかならないでしょうか。



inovia

リンク

2010/10/5(Tue) 21:11:07|NO.35247


#module #defcfunc 猫 int _引数 ,local 変数1 変数1 = _引数 mes "犬 = " + 犬( 20 ) return 変数1 #defcfunc 犬 int _引数 ,local 変数1 変数1 = _引数 return 変数1 #global mes "猫 = " + 猫( 10 )

のようにローカル変数を使ってみるのはどうでしょうか?
同じ変数名でも独立したものとして扱われます。



ひらまる

リンク

2010/10/6(Wed) 01:14:59|NO.35248

#deffuncについて、ローカル変数の説明を読んできました。
ローカル変数とは 引数の種類ではなく、
その命令や関数の中でだけ有効な 本当にローカルな変数のことだったのですね。
1つの命令に1つの#module #globalを用意することすら考えていたのですが、
まさかこんなに便利な方法があったとは…

SYAMさんのおかげで 別の解決方法を探すための質問ができました。
inoviaさんのおかげで ローカル変数の便利さを知りました。
本当にありがとうございました。



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