第28章 マクロの手始め

 前回のインクルードに続き、今回も # のつく命令をやります。その名もマクロ。プログラムをわかりやすくしてくれる助っ人です。


 今回の要点はこんな感じです。


 では、いってみましょう。


 前回インクルードについて話しました。今回はその親戚ともいえるマクロの基本について話していきます。

 インクルードとは、その文を書いたところに別のファイルが差し込まれるというものでした。ところがマクロはそうではなくて、テキストを差し込むという代物なのです。

 これだけではあまりピンとこないでしょう。なので、実物を早速見てみましょう。

プログラム1プログラム1’
// Macro1.cpp
#include <iostream.h>

#define FUNC     void Func(int x, int y) 

FUNC;

int main()
{
    Func(1, 2);
    Func(158, 144);
    return 0;
}

FUNC
{
    cout << "2 * " << x << " + " << y
         << " = " << 2 * x + y << endl;
}
// Macro1.cpp
#include <iostream.h>



void Func(int x, int y);

int main()
{
    Func(1, 2);
    Func(158, 144);
    return 0;
}

void Func(int x, int y)
{
    cout << "2 * " << x << " + " << y
         << " = " << 2 * x + y << endl;
}

 インクルードの時と同様に、プログラム1はプログラム1’であるとしてコンパイルされるという風に表を見て下さい。

 プログラム1の FUNC が、プログラム1’では void Func(int x, int y) に置き換わっていることがわかります。つまり、FUNC がマクロです

 では、この FUNC というのはどこからきたのでしょうか? プログラムを見てみると、どうやら

#define FUNC     void Func(int x, int y)

あたりからきているようですね。

 このように、#define を使うとマクロが定義できます。define は「定義する」という意味ですね。

 詳しい書式は

#define <マクロ名> <差し込むテキスト>

です。

 マクロ名に使える文字は変数や関数と同じです。忘れたという人は第5章を参照して下さい。

 ...何か赤文字だらけになってしまいましたね (^ ^;。まぁ気にせず先に進みましょう。


 マクロは関数みたいな形にすることも可能です。つまり、引数を持つことが可能です

 では、次のプログラムを見て下さい。

プログラム2プログラム2’
// Macro2.cpp
#include <iostream.h>

#define FUNC(name)     void name(int x, int y) 

FUNC(Func);

int main()
{
    Func(1, 2);
    Func(158, 144);
    return 0;
}

FUNC(Func)
{
    cout << "2 * " << x << " + " << y
         << " = " << 2 * x + y << endl;
}
// Macro2.cpp
#include <iostream.h>



void Func(int x, int y);

int main()
{
    Func(1, 2);
    Func(158, 144);
    return 0;
}

void Func(int x, int y)
{
    cout << "2 * " << x << " + " << y
         << " = " << 2 * x + y << endl;
}

 テキストを差し込むだけなので、当然引数に型などはありません。差し込むテキストの name の部分が入れたテキストに置き換わって、それから差し込まれます。

 これは特に問題ありませんね。


 では、このマクロ。一体どう使うとよいのでしょうか? それは次章に回したいと思います。

 では、今回の要点です。


 それでは次回まで、さようなら。


第27章 インクルード | 第29章 マクロの活用法

Last update was done on 2002.2.11

この講座の著作権はロベールが保有しています