C中的#和##宏
计划1:
#include #define foo(x, y) #x #y int main() { printf("%s\n", foo(k, l)); //prints kl return 0; }
计划2:
#include #define foo(m, n) m ## n int main() { printf("%s\n", foo(k, l)); //compiler error }
为什么这两个程序的输出变化如此? 这两个程序之间的确切区别是什么?
#
是“字符串化”运算符; 它将其参数转换为字符串文字。
##
是“令牌粘贴”操作符; 它将它的两个参数连接成一个标记,不一定是字符串文字。
一个例子:
#include #define foo(m, n) m ## n int main(void) { char *kl = "token pasting"; printf("%s\n", foo(k, l)); }
打印:
token pasting