dequantianhe 发表于 2020-1-10 10:05:27

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 13:10:53

本帖最后由 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

woopy 发表于 2020-1-10 14:31:51

printf()读取参数是从右到左读取,这么理解的话就是你那种结果了

BIYU 发表于 2020-1-19 14:44:51

你不应该思考一下,它们的平方真正的答案是多少么
页: [1]
查看完整版本: S1E40宏定义bug问题,为何我的结果与小甲鱼的不同?