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;
}

免责声明:内容仅供参考,不保证正确性!


全栈后端 / C语言教程 :


















Copyright © 2022-2024 笨鸟工具 x1y1z1.com All Rights Reserved.