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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0302
tararirarin「命令」と「マクロ」の違い5解決


tararirarin

リンク

2010/3/2(Tue) 22:11:08|NO.30923

今、HSP Document Library 内のリファレンスを見ていました。
「プログラム制御命令」と「プログラム制御マクロ」が分けて書いてあります。
どちらの命令もスクリプト内で普通に使えるようですが、「命令」と「マクロ」の
違いはなんだろう?と疑問に思いました。

HSPに出てくるマクロ命令とは、我々がそれを記述するだけで、
コンピュータ側でHSPの他の命令を使ったプログラム?サブルーチン?を実行することで
その機能を実現している、となんとなく想像しましたが、
こんな感じの理解でいいんでしょうか?

また、
「マクロは使わなくても同じことはできる」
「なるべくならマクロは使わないほうがよい」
「マクロは処理速度は遅め」
こういうことは言えるんでしょうか?

よろしくお願いします。



この記事に返信する


いかろ

リンク

2010/3/2(Tue) 23:01:29|NO.30927

プログラム制御マクロはcommonディレクトリ内のhspdef.as内で定義されているっぽいです。
なので、プログラム制御マクロを使わなくても組むことはできます。
ただ、場合によって(たくさんのifを使うなど)はプログラム制御マクロを使ったほうが
ソースは読みやすくなります。
コンパイル時に置き換えられるので速度が遅くなることはないはずです。



tsuka

リンク

2010/3/2(Tue) 23:15:27|NO.30929

まぁ#deffunc(命令)も#define(マクロ)も変わらないです。
出来ることは殆ど変わりません。速度はマクロのほうが速いでしょうね。ただ、マクロはコンパイル時に置き換えられます。

一応、#define(マクロ)は一行で出来る程度の簡単な処理を置き換えます。

#define ctype HIWORD(%1) (%1 >> 16 & $FFFF)

#deffunc(命令)はそれ以外の処理ですね。
ちなみに、#deffuncのほうはサブルーチンになります。

ただ、特殊展開マクロはマクロにしか出来ないことです。(whileやswitchなどはこのマクロを使って作られています。



レノス

リンク

2010/3/2(Tue) 23:24:19|NO.30930

マクロというのは、スクリプトを自動的に書き換える機能で、
それを利用して実装されている命令 (っぽいもの) が、いわゆる「マクロ命令」です。

たとえば、「and」という(標準)マクロを書くと、実際には
「&」に書き換えられて、そう書いたのと同じ処理になります。

実際に書き換えられた後のスクリプトは、元のスクリプトに次の1行を付け足して
実行すると作られる、.i ファイルを見るとわかります
( 見ても面白いものではありませんし、読みにくいですけど、参考までに )。


#cmpopt ppout 1

> マクロは使わなくても同じことはできる
前述の通り、マクロは「書き換えているだけ」なので、可能です。

でも、マクロを使うのは「簡単に or わかりやすく 書くため」なので、
マクロを使わないと面倒、わかりにくい場合が多いです。特に switch や ginfo_系 。

> なるべくならマクロは使わないほうがよい
> マクロは処理速度は遅め
ということはありません。

*蛇足
HSPプログラムコンテストのショート部門では、マクロを使うと、使わないときより
ax ファイルが大きくなってしまうことが多いので、オススメしません。
通常なら全く気にする必要のない程度の増加ですが。

マクロを使わない方が良い場面なんて、そのくらいです。



tararirarin

リンク

2010/3/3(Wed) 00:22:03|NO.30932

皆さん親切なお返事ありがとうございます。

いかろさん、教えていただきありがとうございます。
レノスさんにも詳しく教えていただきまして、マクロはわかりやすく書くための道具だ
言うことがわかりました。

#cmpopt ppout 1
これを試してみました。すごい!スクリプトが書き換えられた!長くややこしくなった!
なるほど、マクロは積極的に使いたいと思います。

ついでに、スクリプトエディタ上で and は薄い空色で表示されることに「?」でしたが、
あれもマクロだったのですね!(笑)

tsukaさん
「#deffunc(命令)と#define(マクロ)」について教えてくださって感謝です。
ここまで考えたことはありませんでしたが、違いや使い方のイメージが湧きました。
目から鱗的な、非常に楽しい読み物です。ありがとうございます!


今回、質問の答え以上のいろいろな知識・考え方が身につきました!
心のモヤモヤも晴れました。ありごとうございました。



tararirarin

リンク

2010/3/3(Wed) 00:22:38|NO.30933

解決チェックを忘れてました。><



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