关于tcpl习题4-14定义宏swap(t,x,y)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于tcpl习题4-14定义宏swap(t,x,y)相关的知识,希望对你有一定的参考价值。
题意要求宏,能交换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); }
这是因为大师在书上明确指出宏不是调用函数,而是直接替换文本插入代码中。所以开始的代码中()一起被插入了代码中。
以上是关于关于tcpl习题4-14定义宏swap(t,x,y)的主要内容,如果未能解决你的问题,请参考以下文章