1. 文字列化演算子 (#)
実引数をダブルクオーテーションで括る
1.1. 実引数を1つ展開するだけの単純な例
1.1.1. プリプロセッサ展開前
| 1 2 3 4 5 6 7 8 | #include <stdio.h> #define  string_macro_func(x)    #x int main() {     char* str = string_macro_func(Hello);     printf("%s\n", str);     return 0; } | 
1.1.2. プリプロセッサ展開後
| 1 2 3 4 5 | int main() {     char* str = "Hello";     printf("%s\n", str);     return 0; } | 
1.2. 組み合わせた例
1.2.1. プリプロセッサ展開前
| 1 2 3 4 5 6 7 8 | #include <stdio.h> #define  print_macro_func(x)    printf("%s\n", #x) int main() {     print_macro_func(Hello);     return 0; } | 
1.2.2. プリプロセッサ展開後
| 1 2 3 4 | int main() {     printf("%s\n", "Hello");     return 0; } | 
2. トークン連結演算子 (##)
トークン(ソースコード上の名前)を連結する
2.1. プリプロセッサ展開前
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> #define token_macro_func(x)   X##x int main() {     int   X1;     float X2;     char  Xn;     token_macro_func(1) = 10;     token_macro_func(2) = 20.0;     token_macro_func(n) = 'N';     printf("%d\n", token_macro_func(1));     printf("%f\n", token_macro_func(2));     printf("%c\n", token_macro_func(n));     return 0; } | 
2.2. プリプロセッサ展開後
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | int main() {     int   X1;     float X2;     char  Xn;     X1 = 10;     X2 = 20.0;     Xn = 'N';     printf("%d\n", X1);     printf("%f\n", X2);     printf("%c\n", Xn);     return 0; } |