VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 736|回复: 6

#define问题!!!

[复制链接]

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-18 13:30:02 | 显示全部楼层 |阅读模式


#define CHR(r) r*r

main()
{
  printf("%d",CHR(1+2));
}

结果是什么。我试试。结果是5。为什么是5。机制是怎样的?

回复

使用道具 举报

1

主题

13

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-4-23 09:00:01 | 显示全部楼层
这人都咋了?

都喜欢钻牛角尖了...

这种问题讨论的都N遍了..没有意义.

#define CHR(r) (r)*(r)
回复

使用道具 举报

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-4-23 13:15:01 | 显示全部楼层
考试 要考这题
回复

使用道具 举报

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-4-23 16:30:01 | 显示全部楼层
#define CHR(r) (r)*(r)

如果是你说的(r)*(r)

那CHR(2+3)应该等于4+9=13

可能结果等于11
回复

使用道具 举报

1

主题

13

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-4-23 17:00:01 | 显示全部楼层
就是 1+2*1+2 =5
回复

使用道具 举报

1

主题

13

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-4-24 11:30:01 | 显示全部楼层
宏就是替换.

如果不加括号就会出现等于5的结果.
回复

使用道具 举报

0

主题

10

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-4-24 13:45:01 | 显示全部楼层
我也来补充点:
如果要保险点,我觉得应该这样:
#define CHR(r) ((r)*(r)),
在最外层再加上一个括号,呵呵,否则,要是有这样一个表达式:

CHR(r1)/CHR(r2),

#define CHR(r) (r)*(r),可能也回出现一些问题.
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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