スポンサードリンク
HOME > C言語 > プリプロセッサ #define マクロ関数

C言語 - プリプロセッサ #define マクロ関数

#define は文字列の置換ができますが、簡易関数のように使うこともできます。


#define menseki(x, y) ((x) * (y) / 2) // マクロの定義

void main(void) {

   int ans = 0;

   ans = menseki(5, 10);   // マクロの使用

   printf("面積=%dです\n", ans);

}


このようなマクロを定義すると、
ans = menseki(5, 10); のところが ans = ((5) * (10) / 2);
に置き換わり、コンパイルされます。

簡単な機能の関数をマクロとして使えば作業効率が上がりますが、
注意しなければならない事もあります。

上記の例では、厳重にカッコをつけてありますが、これには意味があります。
次の例を見てみましょう。



うまくいかないマクロ1

#define macro1(x, y) x * y   // マクロの定義

i = macro1(a+5, b+10);     // マクロの使用

置換後:a+5 * b+10;


置換後、5 * b が先に計算されてしまってうまくいきません。

うまくいかないマクロ2

#define macro2(x, y) (x) + (y) // マクロの定義

i = macro2(4, 5) / 10;     // マクロの使用

置換後:(a) + (b) / (10);


置換後、b / 100 が先に計算されてしまってうまくいきません。

うまくいかないマクロ3

#define macro3(x, y) ((x) * (y)) // マクロの定義

i = macro3(x++);         // マクロの使用

置換後:((x++) * (x++));


置換後、x++ が2回行われてしまい、うまくいきません。



このように、やれるだけのカッコをつけてもうまくいかない場合があるので、
プログラマが注意しなければなりません。



スポンサードリンク







HOME

言語解説編
プログラミング用語・知識

C言語

C++言語

Java

C#

Visual Basic.NET

アプリケーション編
C言語による
コンソールプログラミング




Copyright (C) プログラミングランド All Rights Reserved