读书人

带参数的宏定义解决方法

发布时间: 2012-06-19 14:45:20 作者: rapoo

带参数的宏定义

C/C++ code
#define SWAP(a,b) t=b;b=a;a=t;#include <stdio.h>int main(void){    int a=0,b=0,c,d,t=0;    printf("Input two integers a,b:");    scanf("%d,%d",&c,&d);    SWAP(c,d);    printf("NOW,a=%d,b=%d\n",a,b);    return 0;}

为什么c,d的值没有将a,b替换?

[解决办法]
C/C++ code
//终于明白你的意图了SWAP(a,b) //这里的a和b相当于一个参数,预处理后就没有a和b这两个东西了,宏中的a和b会被替换你应该再回去看下基础教材//gcc预处理结果int main(void){    int a=0,b=0,c,d,t=0;    printf("Input two integers a,b:");    scanf("%d,%d",&c,&d);    t=d;d=c;c=t;;    printf("NOW,a=%d,b=%d\n",a,b);    return 0;}
[解决办法]
SWAP(c,d);展开后的情况是这样:t=d;d=c;c=t,是c与d的值互换了,这个展开式中,根本没有出现a,b所以a,b的值仍为0!

读书人网 >C语言

热点推荐