gpt4 book ai didi

c - 为什么预处理器的标记粘贴运算符 ## 对变量不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 06:10:13 27 4
gpt4 key购买 nike

#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,它会完美地工作。错误是 ab函数中未声明的首次使用。

最佳答案

预处理器在编译时运行。所以 '##' 运算符在编译时被评估。您不能将它与运行时确定的值一起使用。

这里发生的是 a##b 被简单地转换为 ab,因此错误 ab undefined

关于c - 为什么预处理器的标记粘贴运算符 ## 对变量不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58582609/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com