gpt4 book ai didi

c - c中的宏函数如何使用引用传递

转载 作者:太空宇宙 更新时间:2023-11-04 06:14:25 27 4
gpt4 key购买 nike

我正在学习 C 语言的宏,我在宏中写了一个小函数来交换数字,但将值作为“按值传递”传递,因为我没有在参数中的变量之前使用运算符 (&) 的地址,但是当我运行程序时。值(value)被交换了。您可以引用代码并指出我理解错误的地方?

#include<stdio.h>
#include<conio.h>
#define swap(a,b) a = a+b;b = a-b; a = a-b;
int main()
{
int x = 5, y = 10;
swap(x,y);
printf("%d %d\n",x,y);
getch();
return 0;
}

在宏中使用参数时,参数是否作为引用传递?

最佳答案

C 没有传递引用。无论如何,这不是这里发生的事情。当一个宏被“调用”时,预处理器用宏体替换调用点。

以你的例子,调用

swap(x,y);

被替换为

x = x+y;y = x-y; x = x-y;;

最后一行是编译器的实际解析器看到的。

许多编译器都有在预处理步骤后停止的选项。我建议您使用它来准确查看预处理器做了什么。


我也希望您开始了解宏如何“破坏”您的代码。

例如如果代码是

if (some_condition)
swap(x,y);

然后它会被扩展到(重新格式化)

if (some_condition)
x = x+y;
y = x-y;
x = x-y;
;

这显然不是预期的,也不会起作用。

当宏的参数不是简单的变量,而是表达式时,您也会遇到这种情况。喜欢

swap(x+1,y*2)

虽然会被替换为

x+1 = x+1+y*2;y*2 = x+1-y*2; x+1 = x+1-y*2;;

这也不行。

关于c - c中的宏函数如何使用引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48879389/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com