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; } |