鱼C论坛

 找回密码
 立即注册
查看: 700|回复: 4

[已解决]宏定义

[复制链接]
发表于 2020-12-23 09:43:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#define SQ(y) (y)*(y)
void main()
{
        int a,sq,sq1;
        scanf("%d",&a);
        sq1=SQ(a+1);
        sq=160/sq1;
        printf("%d",sq);
}



#include<stdio.h>
#define SQ(y) (y)*(y)
void main()
{
        int a,sq,sq1;
        scanf("%d",&a);
        sq=160/SQ(a+1);
        printf("%d",sq);
}




为什么上下两种输出的结构不一样?
最佳答案
2020-12-23 09:53:05
本帖最后由 xieglt 于 2020-12-23 10:23 编辑

#define SQ(y)  (y)*(y)

sq1=SQ(a+1);
sq=160/sq1;
把 SQ(a+1) 替换成得
sq1 = (a+1) * (a+1)
sq=160/sq1;


sq=160/SQ(a+1);
把 SQ(a+1) 替换成得
sq = 160 /(a+1) * (a+1)

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

使用道具 举报

发表于 2020-12-23 09:53:05 | 显示全部楼层    本楼为最佳答案   
本帖最后由 xieglt 于 2020-12-23 10:23 编辑

#define SQ(y)  (y)*(y)

sq1=SQ(a+1);
sq=160/sq1;
把 SQ(a+1) 替换成得
sq1 = (a+1) * (a+1)
sq=160/sq1;


sq=160/SQ(a+1);
把 SQ(a+1) 替换成得
sq = 160 /(a+1) * (a+1)

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

使用道具 举报

发表于 2020-12-23 09:57:28 From FishC Mobile | 显示全部楼层
所以说这个你为什么会困惑。。。乘除法正常来说从左到右依次计算,第一段先计算了后面的乘法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 10:19:16 | 显示全部楼层
本帖最后由 jackz007 于 2020-12-23 10:22 编辑

        第二个代码有问题,但是,宏定义这样写就没有问题了。
#define SQ(y) ((y)*(y))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-23 13:21:24 | 显示全部楼层
回复的都太棒了,一下就明白了

评分

参与人数 1贡献 +3 收起 理由
昨非 + 3

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 08:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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