#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);
}
输出是什么?为什么?在这种情况下了解预处理器指令?
#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);
}
输出是什么?为什么?在这种情况下了解预处理器指令?
根据的使用情况以及c
未在宏中使用的事实,它看起来好像在宏中存在拼写错误。除了使用int
的,应该说c
:
#define swap(a,b,c)(c t;t=a;a=b;b=t;);
事实上,当这个“修复”会给你的宏观的总体思路,它不会编译。请参阅Peyman's answer,告诉您如何正确书写。
基本上,它看起来像一种交换c
类型的两个变量a
,b
的方法。
在你的情况下,输出将是:
20 10
这种交换算法的工作方式很简单。基本上,你想复制a
到b
和b
到a
。但是,如果您将b
复制到a
,则会丢失a
,并且您将被扣两份b
。
而不是仅仅复制b
为a
,你先救的a
拷贝到一个名为t
一个临时变量,然后复制到b
a
,然后复制t
(持有的a
原始值)为b
。当你完成后,你可以忘记t
。
不能将语句放在括号中或在表达式中声明变量。宏需要更多的工作。 – 2011-02-08 07:12:10
更好地重新写你的宏是这样的:
#define swap(a, b, type) \
do { \
type t = a; \
a = b; \
b = t; \
} while (0)
哪里在您的宏使用`C`? – Peyman 2011-02-08 07:01:27
你的代码不能编译,但你不清楚你的问题是什么。 – 2011-02-08 08:06:06