!!!!!!!!!请大家进来看看

d2008417633 2008-06-22 09:30:01
#include"stdio.h"
#define SQR(X) X*X
main()
{ int a=16, k=2, m=1;
a=SQR(k+m)/SQR(k+m);
printf("%d\n",a);
getch();
}
请问为什么输出7请大家解释一下
...全文
93 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
WillyWonka 2008-06-23
  • 打赏
  • 举报
回复
上面都解释过了,接分就行了
太乙 2008-06-23
  • 打赏
  • 举报
回复
有时候可以用用typedef~~
chenjingyuan1018 2008-06-23
  • 打赏
  • 举报
回复
又是这个问题,不能计算···要直接替换!
xkyx_cn 2008-06-23
  • 打赏
  • 举报
回复
一不小心就中了“宏”这颗地雷

建议深度了解宏的机制,仅仅只是代码展开,不是函数调用
xjb922 2008-06-23
  • 打赏
  • 举报
回复
你写的不明确 写法很不好 纯粹是自己找麻烦啊!
长安宁 2008-06-23
  • 打赏
  • 举报
回复
#define SQR(X) X*X
int a=16, k=2, m=1;
a=SQR(k+m)/SQR(k+m);

a=k+m*k+m/K+m*k+m
=2+1*2+1/2+1*2+1
=2+2+0.5+2+1
=7.5
由于 a 是 int 型
所以,就是7
建议写成
#define SQR(X) ((X)*(X))
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lzr001 的回复:]
宏替换只是替换字符,要注意优先级,
最好定义成这样
#define SQR(X) ((X)*(X))
[/Quote]
  • 打赏
  • 举报
回复

#include <stdio.h>
#define SQR(X) ((X)*(X))

main()
{ int a=16, k=2, m=1;

a = SQR(k + m)/SQR(k + m);
printf("%d\n",a);
getch();
}

digifan 2008-06-22
  • 打赏
  • 举报
回复
#define SQR(X) ((X)*(X))
这样才是(k+m)*(k+m)

你的定义编译为k+m*k+m
所以结果不对
wangye292 2008-06-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 baihacker 的回复:]
引用 2 楼 wwwlinsen 的回复:
把你定义的宏改成下面的看一下正确否:


C/C++ code
#define SOR(X) (X)*(X)


C/C++ code#define SOR(X) ((X)*(X))
[/Quote]
lovelyday 2008-06-22
  • 打赏
  • 举报
回复
楼上的都是说过了,#define SQR(X) ((X)*(X))
lzr001 2008-06-22
  • 打赏
  • 举报
回复
宏替换只是替换字符,要注意优先级,
最好定义成这样
#define SQR(X) ((X)*(X))
baihacker 2008-06-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wwwlinsen 的回复:]
把你定义的宏改成下面的看一下正确否:


C/C++ code
#define SOR(X) (X)*(X)
[/Quote]
#define SOR(X) ((X)*(X))
wwwlinsen 2008-06-22
  • 打赏
  • 举报
回复
把你定义的宏改成下面的看一下正确否:


#define SOR(X) (X)*(X)
机智的呆呆 2008-06-22
  • 打赏
  • 举报
回复
2+1*1+2/2+1*2+1=7
宏 纯文本替换~~~~~~~~·
SQR(k+m)/SQR(k+m)
替换后 就是上式

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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