鱼C论坛

 找回密码
 立即注册
查看: 3048|回复: 3

S1E40宏定义bug问题,为何我的结果与小甲鱼的不同?

[复制链接]
发表于 2020-1-10 10:05:27 | 显示全部楼层 |阅读模式
5鱼币
大家好,我在验证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 的值,这里面还涉及运算的顺序问题,还请有经验的大神给详细说明一下~

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-10 13:10:53 From FishC Mobile | 显示全部楼层
本帖最后由 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-10 14:31:51 | 显示全部楼层
printf()读取参数是从右到左读取,这么理解的话就是你那种结果了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-19 14:44:51 | 显示全部楼层
你不应该思考一下,它们的平方真正的答案是多少么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 16:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表