#if !defined(STDIO_H) && !defined(STDLIB_H)
#include<stdio.h>
#include<stdlib.h>
#endif
#if !defined(LIMITS_H)
#include<limits.h>
#endif
#if !defined(MATH_H)
#define pow(a,b) {\
int i=1,p=1;\
while(i<=b)\
{\
p=p*a;\
i++;\
}\
printf("%d\n",p);\
}
#define join(a,b) a##b
#endif
int main()
{
int a,b;
printf("Enter a b : ");
scanf("%d %d",&a,&b);
pow(a,b);
printf("%d\n",join(a,b));
return 0;
}
这个错误在
printf("%d",join(a,b));
行,但是如果我用56和34这样的常量替换a和b,它会很好地工作。 最佳答案
预处理器在编译时运行。因此,在编译时对“35;#”运算符求值。不能将其与运行时确定的值一起使用。
这里发生的是a##b
被简单地转换为ab
,因此出现了错误ab undefined
。
关于c - 预处理程序的 token 粘贴运算符##为什么不对变量起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58582609/