#define swap(a,b,c)(int t;t=a;a=b;b=t;);
void main()
{
int x=10,y=20;
swap (x,y,int);
printf("%d %d\n",x,y);
}
输出是什么?为什么?
答案 0 :(得分:6)
最好像这样重写你的宏:
#define swap(a, b, type) \
do { \
type t = a; \
a = b; \
b = t; \
} while (0)
答案 1 :(得分:2)
基于用法以及宏中未使用c
的事实,看起来宏中存在拼写错误。应该说int
:
c
#define swap(a,b,c)(c t;t=a;a=b;b=t;);
事实上,虽然这个“修复”会给你宏的一般概念,但它不会编译。请参阅Peyman's answer,它告诉您如何正确编写它。
基本上,它似乎是一种交换类型a
的两个变量b
,c
的方法。
在您的情况下,输出将是:
20 10
此交换算法的工作方式很简单。基本上,您希望将a
复制到b
和b
复制到a
。但是,如果您只是将b
复制到a
,则会丢失a
,并且您将被困在b
的两个副本中。
您不必将b
复制到a
,而是先将a
的副本保存到名为t
的临时变量中,然后复制b
a
到t
,然后将a
(其原始值b
)复制到t
。完成后,您可以忘记{{1}}。