A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© to_love 中级黑马   /  2015-8-21 21:54  /  1162 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

打眼一看这结果就是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;
}

13 个回复

正序浏览
因为你自认为加上了括号,但是是不加括号的,先算*,后算+
回复 使用道具 举报
我都快忘了这个定义了,谢谢提醒
回复 使用道具 举报
宏定义 不建议这样写
回复 使用道具 举报
细节问题,这就叫代码规范。
回复 使用道具 举报
没有信号 来自手机 中级黑马 2015-8-25 09:07:39
10#
不大懂
回复 使用道具 举报
第一梦 发表于 2015-8-21 23:56
楼上都是正解!!要打印出100,需要这样写:#define pingfang(a) ((a)*(a))

不错,彻悟
回复 使用道具 举报
5+5*5+5=35
回复 使用道具 举报
我都快忘了这个定义了,谢谢提醒
回复 使用道具 举报
要用机器的方式来思维,宏定义只是简单地替换,若要想输出100则需要做如下改进#define pingfang(a) ((a)*(a))
回复 使用道具 举报
楼上都是正解!!要打印出100,需要这样写:#define pingfang(a) ((a)*(a))
回复 使用道具 举报
就相当于你传过来的是(5+5*5+5)
回复 使用道具 举报
宏定义只是简单替换。所以是5+5*5+5=35
回复 使用道具 举报
a = a+a*a+a = 5+5*5+5 = 35
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马