黑马程序员技术交流社区

标题: 这个有点意思 [打印本页]

作者: to_love    时间: 2015-8-21 21:54
标题: 这个有点意思
打眼一看这结果就是100,可是输出才知道是35,WHY?
#define pingfang(a) (a*a)
#include "stdio.h"
int main()
{
    int c = pingfang(5+5);
    printf("c is %d\n", c);
    return 0;
}
作者: 毛强    时间: 2015-8-21 21:57
a = a+a*a+a = 5+5*5+5 = 35
作者: Jo_    时间: 2015-8-21 23:29
宏定义只是简单替换。所以是5+5*5+5=35
作者: woxingwosu    时间: 2015-8-21 23:32
就相当于你传过来的是(5+5*5+5)
作者: 第一梦    时间: 2015-8-21 23:56
楼上都是正解!!要打印出100,需要这样写:#define pingfang(a) ((a)*(a))
作者: smilejoke    时间: 2015-8-22 08:56
要用机器的方式来思维,宏定义只是简单地替换,若要想输出100则需要做如下改进#define pingfang(a) ((a)*(a))
作者: 小笼包    时间: 2015-8-22 15:30
我都快忘了这个定义了,谢谢提醒
作者: 庞佳星    时间: 2015-8-22 17:49
5+5*5+5=35
作者: 张中付    时间: 2015-8-25 09:01
第一梦 发表于 2015-8-21 23:56
楼上都是正解!!要打印出100,需要这样写:#define pingfang(a) ((a)*(a))

不错,彻悟
作者: 没有信号    时间: 2015-8-25 09:07
不大懂
作者: 你是我的小苹果    时间: 2015-8-25 11:05
细节问题,这就叫代码规范。
作者: iphone    时间: 2015-8-25 14:29
宏定义 不建议这样写
作者: 企业部-阿狗老师    时间: 2015-8-25 21:11
我都快忘了这个定义了,谢谢提醒
作者: 翟宇浩    时间: 2015-8-27 22:00
因为你自认为加上了括号,但是是不加括号的,先算*,后算+




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2