带参数的宏定义
#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;}
//终于明白你的意图了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!