关于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)的主要内容,如果未能解决你的问题,请参考以下文章

c语言swap指针

宏和函数的区别

关于宏函数的返回值

关于三维向量加减乘除的C语言宏定义?

swap() 函数实现的方法

some try on func swap about & and *