トップ 一覧 検索 ヘルプ RSS ログイン

コンパイラマクロ

コンパイラマクロ

MMLコンパイラが持つマクロ機能です。コンパイラ内であらかじめMMLを展開してからコンパイルします。そのため、lコマンドvコマンドVコマンドVOPコマンドoコマンド<コマンド>コマンドなどの値がMMLトラックと相互に影響し、リピート制御コマンドLコマンドも使用可能です。さらに、マクロ名+区切り記号の後にパラメータを記述することもできます。

 使用方法

[書式(行頭から)]

$<str> 登録したいMML

<str>にはマクロ名が入ります。最大255文字で、任意の数字とアルファベットが使用可能です。大文字と小文字は区別され、別のマクロとして扱われます。定義されていないマクロを使用するとエラーが発生します。

[例]

$X c8de
A $X:2          ;c8de2 相当
A $X 4.         ;c8de4. 相当
$Y l8 ga
A l4 ef $Y b>c  ;l4 ef l8 gab>c 相当

マクロを使用した回数がそのままデータサイズに反映してしまうため、ドライバマクロに比べてデータサイズは大きくなります。省サイズ化にはドライバマクロ、視認性や利便性の向上にはコンパイラマクロ、と使い分けてください。

マクロに登録するMMLを複数行にまたがって記述したい場合は、「{」 と 「}」 で括ってください。「{}」 の中は改行可能エリアとなります。

[例]

$hoge { v15 l8
        o4 cdefgab>c^1
}

MML中では、マクロ名に使えない文字の直前までをマクロ名と認識します。このため、マクロ名とMMLが繋がっている場合、マクロが定義されていないとみなされ、エラーが発生することがあります。これを防ぐには半角空白やタブ、コロンなどの区切り記号をマクロ名の後ろに明示的に入れてください。

[例]

A $hogea1&a2   ; × マクロ名を「$hogea1」と認識する。
               ;    エラーが発生する可能性がある。

A $hoge:a1&a2  ; ○ マクロ名を「$hoge」と認識する。
               ;    「:」は空白と同じ扱い。

なお、ドライバマクロとは異なり、コンパイラ内で1行に連結してから構文解析を行いますので、マクロ内にエラーが含まれている場合は行番号を表示しません。

[例]

$TEST{
 cdef
 gXab>c
}
A $TEST

;#TESTの2行目・3文字目に「X」という文法エラーが含まれているが、
;エラー表示は「マクロ2 $TEST 内, 10文字目」となる
関連
ドライバマクロ, 改行可能エリア