题意要求宏,能交换t类型的两个参数。由于愚昧,没读懂题意。于是在网上查到答案:
#define SWAP(t,x,y) (t temp;temp = x;x = y;y = temp;)
虽然懂了意思但用gcc写了个例子编译失败。
#include<stdio.h> #define SWAP(t,x,y) (t temp;temp = x;x = y;y = temp;) #define dprintf(expr) printf(#expr " = %d\n",expo) main() { int x = 10; int y = 40; SWAP(int,x,y) dprintf(x); dprintf(y); }
但去掉宏定义中的()就能正确交换xy的值
#include<stdio.h> #define SWAP(t,x,y) t temp;temp = x;x = y;y = temp; #define dprintf(expr) printf(#expr " = %d\n",expo) main() { int x = 10; int y = 40; SWAP(int,x,y) dprintf(x); dprintf(y); }
这是因为大师在书上明确指出宏不是调用函数,而是直接替换文本插入代码中。所以开始的代码中()一起被插入了代码中。