Cha*_*ace 1 c macros c-preprocessor call-by-value
#include<stdio.h>
#define exch(A,B) {int t=A;A=B;B=t;}
int main(void)
{
int a=1,b=4;
exch(a,b);
printf("%d\t%d\n",a,b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印:a=4,b=1
在输出中,a和b已被交换; 为什么宏不按值调用?请通过解释结果帮助我.
因为宏不是函数,所以预处理器只是替换文本.宏替换后,您的程序变为:
//code in stdio.h
int main(void)
{
int a=1,b=4;
{int t=A;A=B;B=t;}
printf("%d\t%d\n",a,b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
看到?交换中没有函数调用.