b的结果为什么是13,求解?

wxs373061200 2010-09-25 06:03:34
#include <iostream.h>
#include <conio.h>
#define M(m) m*m
f1(int x){
int a=3;
return -M(x+a);

}
int main(void){
int a=5,b;
b=f1(a);
cout<<b<<endl;

}

...全文
119 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxs373061200 2010-09-25
  • 打赏
  • 举报
回复
感谢各位坛友,真是没具体注意这个事情,还以为-M(x+a)中(x+a)有括号就好了,一语点醒梦中人
hongwenjun 2010-09-25
  • 打赏
  • 举报
回复
#include <iostream>
#include <conio.h>

#define M(m) (m)*(m) //定义宏

int f1(int x);

int main(void)
{
using namespace std;
int a=5,b;
b=f1(a);
cout<<b<<endl;
}


int f1(int x)
{
int a=3;
return -M(x+a);
}
hongwenjun 2010-09-25
  • 打赏
  • 举报
回复
#include <iostream>
#include <conio.h>

#define M(m) m*m //定义宏

int f1(int x);

int main(void)
{
using namespace std;
int a=5,b;
b=f1(a);
cout<<b<<endl;
}


int f1(int x)
{
int a=3;
return -(M(x+a));
}
dingshaofengbinbin 2010-09-25
  • 打赏
  • 举报
回复
宏只是进行简单的替换,比如:
#define M(x) x+x
那么,
M(5)*M(6)在预编译以后替换为:
5+5*6+6=41
而不是
(5+5)*(6+6)=120
cbib_cat 2010-09-25
  • 打赏
  • 举报
回复
5l NB
dahaiI0 2010-09-25
  • 打赏
  • 举报
回复
5楼亮了
zyyjaf 2010-09-25
  • 打赏
  • 举报
回复
宏定义一定要记得加括号
#defined M(m)((m)*(m))
小跑 2010-09-25
  • 打赏
  • 举报
回复
你的式子为-x+a*x+a 把数值代入就可以了
同意4楼的观点,但是如果M(m) (m)*(m) 结果就不一样了。平时注意区分这个就行了
齊麟 2010-09-25
  • 打赏
  • 举报
回复
b 的大写为 B ,从上往下 一刀劈开,就成了13啦~~~
海流风光 2010-09-25
  • 打赏
  • 举报
回复
-5+3*5+3 = 13
guoxuqu 2010-09-25
  • 打赏
  • 举报
回复
照你原来写法 -M(x+a)就是-x+a*x+a
宏只是执行简单的字符串替换
  • 打赏
  • 举报
回复
#define M(m) m*m
改成
#define M(m) (m)*(m)

遇到define只是做简单替换,所以你的代码变成了

-5+3*5+3
guoxuqu 2010-09-25
  • 打赏
  • 举报
回复
#define M(m) m*m 这样写不对
应该这样写 #define M(m) (m)*(m)

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧