作者在 2012-06-03 09:38:59 发布以下内容
先看程序:
#include <stdio.h>
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
#define p(a) #@a
int main(int argc, char* argv[])
{
printf("%d\n",f(1,2));
printf("%s\n", g(f(1,2)));
printf("%s\n", h(f(1,2)));
printf("%c, %d\n", p(1), p(1));
return 0;
}
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
#define p(a) #@a
int main(int argc, char* argv[])
{
printf("%d\n",f(1,2));
printf("%s\n", g(f(1,2)));
printf("%s\n", h(f(1,2)));
printf("%c, %d\n", p(1), p(1));
return 0;
}
输出结果:
12
f(1,2)
12
1,49
f(1,2)
12
1,49
##是连接操作符(是token-pasting operator),可以将操作符两端的标识符级联起来。#是字符串化操作符(stringizing operator),可以将操作符后的标识符转化成字符串。#@是字符化操作符(charizing),可以将操作符后的数据转化成字符。