注册 登录
编程论坛 C语言论坛

宏交换同一个数问题

吕孟伟 发布于 2020-04-25 21:56, 1567 次点击
程序代码:
#include<stdio.h>
#define swap1(a, b) (a = a+b, b = a-b, a = a-b)
int main(void)
{
    int a = 6;
    int b = 7;
    swap1(a, a);
    printf("a = %d\n", a);

    return 0;

}

最后结果a = 0.
执行swap(a, a)时,a值赋给宏中的a与b, 当执行a = a + b时,此时的b值为0。我这样说是否正确呢?
6 回复
#2
fans07922020-04-25 22:05
回复 楼主 吕孟伟
b的值应该7,再加个语句printf("b = %d\n", b);输入结果b 就是7了。
#include<stdio.h>
#define swap1(a, b) (a = a+b, b = a-b, a = a-b)
int main(void)
{
    int a = 6;
    int b = 7;
    swap1(a, a);
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    return 0;
}
只有本站会员才能查看附件,请 登录
#3
forever742020-04-25 22:18
a=a+a
a=a-a
a=a-a
这么说明白不?
#4
forever742020-04-25 22:19
写宏有风险,用宏应谨慎。
#5
吕孟伟2020-04-25 22:27
回复 3楼 forever74
嗯嗯,我想得是a赋值的时候是同一块内存,赋给a后再赋给b时,此时值变为0了。这么看来,想错了。
#6
forever742020-04-25 22:57
误区呀大兄弟,
和内存没关系。
宏是预处理,是编译前在源代码里展开的,字符串替换。
#7
forever742020-04-25 23:09
给后来的初学者:

我在剧本里写:主角劈了个叉。
后来导演决定,主角应该叫吕不韦。
于是我在剧本顶上加了一句
#define 主角 吕不韦

看这个的时候根本就不该担心会不会肌肉拉伤什么的,
因为副导演会负责任地找到一个擅长劈叉的演员。
1