Cプリプロセッサのマクロ内で、仮引数にシャープ記号1個を前置すると、トークンを文字列にしてくれることは“いちおう”知ってはいました。しかし、引数として名前しか使ったことがありません*1。名前helloを文字列"hello"に直す、とかですね。 この文字列化演算子は、単なる名前じゃなくても文字列化できたんですね。へー。 /* a.c */ #include <stdio.h> #define PRINT_EXPR(expr) \ printf("%s = %d\n", #expr, expr) int main() { PRINT_EXPR(1 + 2); PRINT_EXPR(1 + 2*3); int x = 10; PRINT_EXPR(x); PRINT_EXPR(x*x + x + 1); return 0; } $ gcc a.c $ ./a.exe 1 + 2 = 3 1 +