スポンサードリンク

例:【 #define max 100 】
【 max 】と言うマクロ名をコンパイル前処理段階で【 100 】と言う文字列に置き換えることが可能になります。
使い方サンプルを見ていただくと判りやすいと思います。
#include <stdio.h>
#define max 100
int main(void)
{
int i;
i=max;
printf("%d",i);
return 0;
}
マクロ名 【 max 】に【 100 】をと言う文字列を置き換えたサンプルです。
変数【 i 】に【 max 】を代入し、確認の為出力させています。

上記の実行結果
置き換えられた値が出力されております。

上記の場合わざわざマクロを使うほどの物ではないのですが、以下の様に記述すれば
プログラムの内容がわかりやすくなるとの事です。
#include <stdio.h>
#define max 100
int main(void)
{
int i;
for(i=0; i<=max; i=i+10){
printf("%d\n",i);
}
return 0;
}


一つの名前で複数の命令を実行するように記述可能なことをマクロと言い、置き換えにはオブジェクト形式マクロと関数形式マクロがあります。
オブジェクト形式マクロ例:【 #define max 100 】(上記サンプルにて説明済み)
関数形式マクロ例:【 #define dta(a,b) ((a)+(b))】
関数形式マクロ例2:【 #define pt() 】

#include <stdio.h>
#define dta(a,b) ((a)+(b))
#define pri(dt) printf("%d\n",dt)
int main(void)
{
int cc;
cc=dta(50,50);
pri(cc);
return 0;
}
関数形式マクロの書式【 #define 任意のマクロ名(引数) 引数を使った置換文字列 】
以下の様に関数式マクロをそれぞれ用意し、メイン関数の中に、変数名【 cc 】に【 dta 】マクロにて【 cc=50+50 】に置き換えられた値を代入し、【 pri 】マクロにて【 printf("%d\n",cc) 】出力に置き換えております。
※【 dta(a,b) ((a)+(b)) 】処理内容の((a)+(b))とカッコしている事に付いてはこちらを見てくださいね。

上記の実行結果


関数形式【 a+b 】カッコ無しサンプル
#include <stdio.h>
#define dta(a,b) a+b
#define pri(dt) printf("%d\n",dt)
int main(void)
{
int cc;
cc=dta(2,4);
pri(cc);
cc=dta(2,4) * dta(6,8);
pri(cc);
return 0;
}
【 #define dta(a,b) a+b】とカッコなしの場合
最初の処理は特に問題は出ないのですが、二行目の処理に付いては、2+4*6+8と処理される為、取得したい値と結果が異なる場合が発生します。その為安全性を確保する為カッコを多用します。この次のサンプルをご覧下さい。

上記の出力結果

カッコを多用して安全性を確保
#include <stdio.h>
#define dta(a,b) ((a)+(b))
#define pri(dt) printf("%d\n",dt)
int main(void)
{
int cc;
cc=dta(2,4);
pri(cc);
cc=dta(2,4) * dta(6,8);
pri(cc);
return 0;
}

上記の出力結果


例:整数・実数にて引数を用いる事が可能です。
#include <stdio.h>
#define dta(a,b) ((a)+(b))
int main(void)
{
int cc;
double dd;
cc=dta(2,4);
printf("%d\n",cc);
dd=dta(1.2345,2.4681);
printf("%f",dd);
return 0;
}

上記の実行結果

簡単ですが説明は以上です。
あかかげまるのC言語入門はこちら!!
スポンサードリンクパソコン勉強部屋 | パソコン勉強部屋2 | ADSL勉強部屋 | メール勉強部屋 | LAN勉強部屋 | ホームページ勉強部屋 | 自宅サーバー勉強部屋 | お役立ちソフトの部屋 | C言語勉強 | 無料ゲーム | 無料セキュリティー | Linuxのコーナー | あかかげまる | オンライン通販 | ショップブランドパソコン | DVDとCD編集ツール |
▲ページトップへ