その時々

その時々で違うんです。特に決まっていないんです。

Cのdefineマクロ

Cのdefineマクロを勉強中です。

オブジェクト形式マクロと関数形式マクロの2種類ある。
オブジェクト形式マクロは

#define max 100

のように別名にするような書き方

関数形式マクロは

#define tasu(a,b) ((a)+(b))
#define prt(c) printf("%d\n", c)
#define MAX(a,b) ((a)>(b)?(a):(b))  /* 大きい方を返す */

のように記述できる。
ちなみに3つめの処理部分は三項演算子
条件式 ? 真 : 偽
となる。

なお、複数行にわたる場合は\を行末に付ける。
その後ろにコメントを書いたりは出来ない。

#define PRINT(num) (num=(num)*10; \
                    printf("%d\n",num))


[追記]2010.9.7

#define hoge(x) "hogeは"#x

とすると引数xで#xが置換される。

#define hoge(x) hoge##x##hoge

とすると引数xで##x##が置換される。
なお##x##は端に記述することは出来ない。(例: ##x##hogeはダメ)

参考URL
http://ratan.dyndns.info/MicrosoftVisualC++/macro.html
http://www.geocities.jp/ky_webid/c/039.html
http://programnet.hp.infoseek.co.jp/clangage/preprocessor.html