为什么宏功能不是按值调用的?

时间:2014-03-01 01:31:16

标签: 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;
}

打印:a=4,b=1

在输出中,a和b已被交换;为什么宏不按值调用?请通过解释结果帮助我。

1 个答案:

答案 0 :(得分:6)

因为宏不是函数,所以预处理器只是替换文本。宏替换后,您的程序变为:

//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;
}

请参阅?交换中没有函数调用。