字符串化操作,Stringfication
符号 #
,对它所引用的宏变量,通过替换后,在其左右各加上一个双引号。
1 | #define WARN_IF(EXP) do{ if (EXP) fprintf(stderr, "Warning: " #EXP "/n"); } while(0) |
实际使用中会出现下面所示的替换过程:1
WARN_IF (divider == 0);
被替换为:1
2
3
4do {
if (divider == 0)
fprintf(stderr, "Warning" "divider == 0" "/n");
} while(0);
连接符,Concatenator
##
,用来将两个token连接成一个Token,连接的Tocken不一定是宏变量。