/********************************************* *关于#和##的特殊用法:在宏定义中,使用前缀#, *宏展开时 ,会把修饰的符号自动在两边加上双引号 *把它展开为字符串,而##则是把两端的符号连接起 *来,但是不会继续展开为字符串,eg如下所示 ********************************************/ #include <stdio.h> #define printf_x(x) printf(#x"=%s\n",#x); #define sort(x) Sort ## x void Sort0() { printf("sort0"); } void Sort1() { printf("sort1"); } void Sort2() { printf("sort2"); } void Sort3() { printf("sort3"); } void Sort4() { printf("sort4"); } int main(int argc, char *argv[]) { /* #h号示例 */ printf_x(doyouknow?); /* ##号示例 */ sort(4)(); return 0; }
结果图: