1

方案一:

#include <stdio.h>
#define foo(x, y) #x #y

int main()
{
  printf("%s\n", foo(k, l)); //prints kl
  return 0;
}

方案二:

#include <stdio.h>
#define foo(m, n) m ## n

int main()
{
  printf("%s\n", foo(k, l)); //compiler error
}

为什么这两个程序的输出会有这种差异?这两个程序之间的确切区别是什么?

4

1 回答 1

4

#是“字符串化”运算符;它将其参数转换为字符串文字。

##是“令牌粘贴”运算符;它将两个参数连接成一个标记,不一定是字符串文字。

一个例子:

#include <stdio.h>

#define foo(m, n) m ## n

int main(void) {
    char *kl = "token pasting";
    printf("%s\n", foo(k, l));
}

打印:

token pasting
于 2013-08-31T20:38:10.077 回答