Вопрос

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

Prints:a=4,b=1

In the output, a and b have been exchanged; why is a macro not call by value? Please help me by explaining the result.

Это было полезно?

Решение

Because macros are not functions, the preprocessor just replaces the text. After the macro substitution, your program turns into:

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

See? There's no function calls in the swapping.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top