S1E40宏定义bug问题,为何我的结果与小甲鱼的不同?
大家好,我在验证S1E40课后习题时,对于代码:#include <stdio.h>
#define SQUARE(x) ((x) * (x))
int main(void)
{
int i = 1;
while (i <= 5)
{
printf("%d 的平方是%d\n", i-1, SQUARE(i++));
}
return 0;
}
所得结果与小甲鱼的不同,
小甲鱼的结果是:
2的平方是1
4的平方是9
6的平方是25
我的结果是:
2的平方是2
4的平方是12
6的平方是30
我认为我的似乎应该是对的,因为通过宏定义替换后每一次引用++运算都会改变 i 的值,这里面还涉及运算的顺序问题,还请有经验的大神给详细说明一下~
本帖最后由 Croper 于 2020-1-10 14:49 编辑
都是错的,就不该出现这种用法
https://fishc.com.cn/forum.php?mod=viewthread&tid=152900
https://fishc.com.cn/thread-132932-1-1.html printf()读取参数是从右到左读取,这么理解的话就是你那种结果了 你不应该思考一下,它们的平方真正的答案是多少么
页:
[1]