pasting does not give a valid preprocessing token解决方法
pasting does not give a valid preprocessing token
C语言开发中,使用标记粘贴运算符##来定义宏函数后,编译C文件,编译器弹出error,并提示:pasting "abc" and ""x1y1z1.com;"" does not give a valid preprocessing token #define test(m) printf("%s\n", abc##m)。比如下方的这个实例:
#include "stdio.h"
#define test(m) printf("%s\n", abc##m)
int main() {
char abc[] = "笨鸟工具";
test("x1y1z1.com");
return 0;
}
这是为什么呢?
原因
观察上面的代码,因为标记粘贴运算符##可以将test()宏函数中x的参数m经过标记粘贴变成abc+m,比如m为1,则变成abc1,那么在主函数中使用test()宏函数,传递参数之后,编译器就会去寻找abc1的变量进行传参,可上面的代码中传递的是abc和"x1y1z1.com"粘贴后的变量,main中并没有,所以会抛出error。
解决方法
可以修改上面中代码的两个地方,比如:
- 将main()主函数中的abc修改成abc1;
- 将主函数main()中的test()中的参数改成1;
比如下方的这个实例:
#include "stdio.h"
#define test(m) printf("%s\n", abc##m)
int main() {
char abc1[] = "xyz";
test(1);
return 0;
}
免责声明:内容仅供参考,不保证正确性!