# とか ## とか
Linux のカーネルのソースを見ていて、こんな書き方ができるんだ、と。
マクロ限定だけれど、# は引数を文字列に変換し、 ## は識別子を結合する。
# の例
#include <stdio.h> #define PUT(x) printf(#x) int main(int argc, char *argv[]) { PUT(hello world\n); }
これを実行すると
hello world
となる。
## の例
#include <stdio.h> #define PUT(x) printf(str_##x) int main(int argc, char *argv[]) { char *str_hello = "hello world\n"; PUT(hello); }
これを実行すると
hello world
となる。