ラベル Programming の投稿を表示しています。 すべての投稿を表示
ラベル Programming の投稿を表示しています。 すべての投稿を表示

2008/12/14

C言語: マクロ展開マクロ

Xenのコードを眺めていたらマクロを展開するためのマクロを見つけたのでメモメモ.
下記のようなマクロが定義されているものとする.

#define EXPAND_MACRO(_MACRO) \
 _MACRO(a) \
 _MACRO(b) \

#define DEFINE(_X) int _X;
#define FUNC(_X) do { func(_X); } while (0);

このとき,
EXPAND_MACRO(DEFINE);
は下記のように展開される.
int a;
int b;

同様に
EXPAND_MACRO(FUNC);
は下記のように展開される.
func(a);
func(b);

便利そうな気もするけど多用すると混乱しそう.

2008/12/11

Linuxカーネルプログラミングメモ

・浮動小数点は使えない
・使えないC言語標準関数が結構ある(文字列関係とか)
・普通のプログラムなら警告で済むものもコンパイルエラーになる(未使用な変数がある,等)
・関数宣言でint test(void)のように省略しないで宣言する必要がある
・int test()はコンパイルエラーになる.