宏中的 ## 运算符如何工作?
How ## operator in macro works?
我正在研究一些宏操作,我得到了这段代码,但我无法弄清楚这段代码实际上是如何工作并生成输出的?是否存在任何 (i-+) 运算符?
这是代码
#include<stdio.h>
#define p(a,b) a##b
#define call(x) #x
int main()
{
do{ int i=14,j=3;
printf("%d",p(i-+,+j));
}while(*(call(625)+3));
return 0;
}
输出为10。
如果你用一些例子来解释它会很有帮助。
宏中的##
是连接运算符,它将操作数粘合在一起。所以在预处理器完成后,该表达式将是
i-++j
这当然意味着 i - (++j)
,即 14 - 4
当然是 10
。
我正在研究一些宏操作,我得到了这段代码,但我无法弄清楚这段代码实际上是如何工作并生成输出的?是否存在任何 (i-+) 运算符? 这是代码
#include<stdio.h>
#define p(a,b) a##b
#define call(x) #x
int main()
{
do{ int i=14,j=3;
printf("%d",p(i-+,+j));
}while(*(call(625)+3));
return 0;
}
输出为10。 如果你用一些例子来解释它会很有帮助。
宏中的##
是连接运算符,它将操作数粘合在一起。所以在预处理器完成后,该表达式将是
i-++j
这当然意味着 i - (++j)
,即 14 - 4
当然是 10
。