This question already has answers here:
Closed 6 years ago.
# and ## in macros
(3个答案)
程序1:
#include <stdio.h>
#define foo(x, y) #x #y

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

程序2:
#include <stdio.h>
#define foo(m, n) m ## n

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

为什么两个程序的输出会有这样的变化?
这两个程序的确切区别是什么?

最佳答案

#是“stringing”运算符;它将其参数转换为字符串文本。
##是“标记粘贴”运算符;它将其两个参数连接到单个标记中,不一定是字符串文本。
例如:

#include <stdio.h>

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

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

打印内容:
token pasting

关于c - C中的#和##宏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18552577/

10-09 09:52