#和C语言中的##宏
方案1:#和C语言中的##宏,c,macros,C,Macros,方案1: #include <stdio.h> #define foo(x, y) #x #y int main() { printf("%s\n", foo(k, l)); //prints kl return 0; } #包括 #定义foo(x,y)#x#y int main() { printf(“%s\n”,foo(k,l));//打印kl 返回0; } 方案2: #include <stdio.h> #define foo(m, n) m ## n
#include <stdio.h>
#define foo(x, y) #x #y
int main()
{
printf("%s\n", foo(k, l)); //prints kl
return 0;
}
#包括
#定义foo(x,y)#x#y
int main()
{
printf(“%s\n”,foo(k,l));//打印kl
返回0;
}
方案2:
#include <stdio.h>
#define foo(m, n) m ## n
int main()
{
printf("%s\n", foo(k, l)); //compiler error
}
#包括
#定义foo(m,n)m##n
int main()
{
printf(“%s\n”,foo(k,l));//编译器错误
}
为什么这两个项目的产出都有如此大的差异?
这两个程序之间的确切区别是什么?
是“字符串化”操作符;它将其参数转换为字符串文字
##
是“令牌粘贴”操作符;它将两个参数连接到一个标记中,而不一定是字符串文字
例如:
#include <stdio.h>
#define foo(m, n) m ## n
int main(void) {
char *kl = "token pasting";
printf("%s\n", foo(k, l));
}
#
是“字符串化”操作符;它将其参数转换为字符串文字
##
是“令牌粘贴”操作符;它将两个参数连接到一个标记中,而不一定是字符串文字
例如:
#include <stdio.h>
#define foo(m, n) m ## n
int main(void) {
char *kl = "token pasting";
printf("%s\n", foo(k, l));
}
#
串接,#
串接。这是一个重复。
字符串化,
串联。这是一个重复。如果到达运行时,可能不是“编译器错误”:)如果到达运行时,可能不是“编译器错误”: