方案一:
#include <stdio.h>
#define foo(x, y) #x #y
int main()
{
printf("%s\n", foo(k, l)); //prints kl
return 0;
}
Run Code Online (Sandbox Code Playgroud)
方案2:
#include <stdio.h>
#define foo(m, n) m ## n
int main()
{
printf("%s\n", foo(k, l)); //compiler error
}
Run Code Online (Sandbox Code Playgroud)
为什么两个程序的输出会有如此大的差异?这两个程序之间的确切区别是什么?
#
是“字符串化”运算符;它将其参数转换为字符串文字。
##
是“标记粘贴”运算符;它将两个参数连接成一个标记,不一定是字符串文字。
一个例子:
#include <stdio.h>
#define foo(m, n) m ## n
int main(void) {
char *kl = "token pasting";
printf("%s\n", foo(k, l));
}
Run Code Online (Sandbox Code Playgroud)
打印:
token pasting
Run Code Online (Sandbox Code Playgroud)