#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,则此方法可以完美地工作。
答案 0 :(得分:4)
预处理器在编译时运行。因此,“ ##”运算符在编译时进行评估。您不能将其与运行时确定的值一起使用。
这里发生的是,a##b
仅被转换为ab
,因此错误为ab undefined
。