マクロ (コンピュータ用語)
出典: フリー百科事典『ウィキペディア(Wikipedia)』
コンピュータ言語においてマクロとは、プログラム中の文字列を、あらかじめ定義された規則に従って置換すること。マクロを展開するプロセッサ(処理系)をマクロプロセッサという。転じて、アプリケーションソフトウェア上の作業を自動化する機能やプログラム言語(マクロ言語)のこともマクロと呼ぶ。
目次 |
[編集] プログラムとマクロ
[編集] アセンブラとマクロ
アセンブリ言語ではもともと、基本的に機械語の命令と一対一対応するニーモニックだけを記述していた。その後、アセンブラにマクロ機能を追加したマクロアセンブラが登場したことで、複数のニーモニックをまとめ、簡略に記述できるようになった。初期のマクロアセンブラの例として、デジタル・リサーチ社のMACやマイクロソフト社のMASM (Macro Assembler) などがある。
[編集] C言語のマクロ
C言語のソースプログラムで「#define 文字列1 文字列2」という行を記述すると、プリプロセッサによって文字列1は文字列2に置換される。「#define 関数マクロ(val) valを含む文字列」のようにパラメータをとることもできる。プリプロセッサは、コンパイラがソースプログラムを解釈してオブジェクトプログラムを生成する前のプロセッサ(処理系)である。
関数マクロには、引数の型を固定しないなど、関数よりも便利な面がある。しかし、そのマクロを使用する際にパラメータでインクリメントやデクリメントを行うと、それが複数回行われる場合がある。通常、利用者はそのような動作を期待していない。これをマクロの副作用とよび、関数マクロの定義時に注意すべきである。こうした点から、C言語では関数マクロ機能をできるだけ使わないようにすべきだとされている。なお、C言語でのマクロについては以下の書籍が参考になる。
- Brian W.Kernighan, Rob Pike『プログラミング作法』 ISBN 4756136494
- 藤原博文『Cプログラミング専門課程』 ISBN 4774100900
[編集] C++のマクロ
C++のテンプレートはマクロの発展系であり、より言語に密着した能力を持つ機能である。しかし、マクロでなければできない処理もあり、Boost.Preprocessorなどマクロをより活用するライブラリも活発である。
[編集] Javaのマクロ
Javaでは多くの機能をCやC++から継承しているが、マクロ機能は含まれていない。
[編集] LISPのマクロ
LISPのマクロは受け取ったS式を別のS式に変換して返す関数として定義される。したがってマクロはそれ自体チューリング完全な言語であり、プログラムが解釈される前に自由に構文木を操作できる。これは実質的に文法構造の自由な拡張機能を(S式という範囲で)与える能力である。
LISPでのマクロについては以下の書籍が参考になる。
- Paul Graham "On Lisp" (邦訳版は http://user.ecc.u-tokyo.ac.jp/~t50473/onlispjhtml/ から読める)
[編集] マクロプロセッサ
m4など、単独のマクロプロセッサもある。m4は、メールサーバソフトウェアsendmailの設定ファイルを作成する場合にも使われる。sendmailの設定ファイルの書式は非常に複雑なので、比較的単純な書式で設定を記述したファイルを作成し、m4などを使って設定ファイルに変換するのである。
[編集] TeX のマクロ
組版処理ソフトウェア TeX では、ユーザーが独自に定義した新しい命令をマクロと呼ぶ。マクロの定義には \newcommand や \def などを用いる。
[編集] アプリケーションソフトウェアのマクロ
多くのアプリケーションソフトウェアで、作業を自動化するためのキーボードマクロ機能やマクロプログラミングが利用できる。
[編集] キーボードマクロ
複数のキーボード(マウスなどが含まれる場合もある)操作を記録し、1タッチで再生する機能。複雑な処理を繰り返し行う場合、作業を省力化し、操作ミスを減らすことができる。このことは、作業を自動化すると見なすこともできる。
[編集] マクロ言語
マクロ言語は、アプリケーションの機能を直接キーボードやマウスなどから利用するのではなく、プログラムから利用するために用いる。キーボードマクロと比べて、複雑な処理を柔軟に記述できる。また、キーボードなどからはできない操作を実現できる場合もある。一方でプログラムを組む必要があるため、やや難易度は高い。
アプリケーションソフトウェアによっては、キーボードマクロの記録がマクロプログラミング言語のコードとして残される場合もある。こうした場合は、キーボードマクロの記録を元に効率的にマクロプログラムを作成できる。
カテゴリ: プログラミング | プログラミング言語の構文 | ソフトウェア