c - 为什么宏函数不是按值调用?

标签 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已经交换;为什么宏不是按值调用?请帮助我解释结果。

最佳答案

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

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

看到了吗?交换中没有函数调用。

关于c - 为什么宏函数不是按值调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108930/

相关文章:

c - 将 stdout/stderr 重定向到 C 中的函数

c - 在 gcc 语句表达式中声明一个数组并返回指向它的指针?

C++预处理器

c - #ifdef 里面#define

c - ##__VA_ARGS__ 在 C99 下当零参数时不吞下逗号

c - 返回指针的函数

c - x=0x80000000时~(x-1)和~x+1的区别

c - 如何使用 libcurl 作为服务器?

c - 为什么我们应该或不应该更喜欢接受参数的宏而不是做同样工作的函数?

ios - 在 Objective C 中对宏值进行字符串化?