CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

初学C问题,

楼主longlong2001(速龙)2002-02-01 14:37:30 在 C/C++ / C语言 提问

有宏定义“#define   B(x,y)   x*y”,则语句“a=B(3>1,2>1);”进行宏替换后的结果时a=(3>1)*(2>1)  
  那为什么:  
  #define   B(x,y)   x*y  
  main()  
  {  
  int   a;  
  a=B(3>1,2>1);  
  printf("%d\n",a);  
  }调试出来等于0?  
  printf("%d\n",(3>1)*(2>1));应该等于1的啊   ?? 问题点数:10、回复次数:12Top

1 楼longlong2001(速龙)回复于 2002-02-01 14:43:10 得分 0

我好急,大家帮帮我好吗Top

2 楼liaogd(liaogd)回复于 2002-02-01 14:44:05 得分 2

其实是  
   
  a=3>1*2>1  
   
  要不你就#define   B(x,y)   (x)*(y)Top

3 楼interestc(随心所欲)回复于 2002-02-01 14:48:18 得分 2

楼上的完全正确,宏替换时要特别注意带括号和不带括号的不同结果,这一点在有的入门书上说的很详细!Top

4 楼jyc_nj(老蔣)回复于 2002-02-01 14:48:59 得分 4

运算符*的优先级高过>,所以宏展开后是   3>1*2>1,先是1*2等于2,再3>2为真,即为1,然后1>1的结果自然是假,即0.Top

5 楼longlong2001(速龙)回复于 2002-02-01 14:54:20 得分 0

我知道了,谢谢各位~Top

6 楼longlong2001(速龙)回复于 2002-02-01 14:56:10 得分 0

这里热心人好多啊,速度夜很快,谢谢了,鞠躬~~~~~~Top

7 楼crm2000(浏览器)回复于 2002-02-01 14:58:24 得分 0

Thinking   in   C++   中专门说了宏定义的几个常见错误,应该尽量避免使用宏定义。Top

8 楼crm2000(浏览器)回复于 2002-02-01 14:59:44 得分 0

thinking   in   C++中专门讲述了宏定义的几个问题,由于宏定义往往出现不可预见的错误,所以最好不要用它Top

9 楼chylc(黑黑)回复于 2002-02-01 15:06:50 得分 0

#define   B((x),(y))   (x)*(y)  
  这才是你的目的吧Top

10 楼chylc(黑黑)回复于 2002-02-01 15:09:44 得分 0

glxSearoc(逍遥) 已经说过了,没看到Top

11 楼kingprg(風云再起)回复于 2002-02-08 12:54:03 得分 0

#define   B(x,y)   x*y  
  a=B(3>1,2>1);/*这里是调用宏,但是宏调用并有像函数调用,它只是起一个置换的作用。因此,在宏执行的过程中,B(3>1,2>1)等于x*y,即3>1*2>1.显然,由于算术运算符的级别比条件运算符的级别要高,结果为1(因3>1的逻辑值为1)>1(因2>1的逻辑值也为1),所以结果为0了。要想得到想要的结果,只要在x与y的两边加上括号.即:#define   B(x,y)   (x)*(y)。  
   
   
  Top

相关问题

  • C++初学
  • c初学者
  • C++初学?
  • C#初学者
  • 初学C++
  • C#初学者
  • 关于初学C++。
  • 初学C++,请教:...
  • c#初学问题
  • C的初学者问题

关键词

  • c++
  • 括号
  • 运算符
  • 宏定义
  • 宏
  • 调用
  • 结果
  • define

得分解答快速导航

  • 帖主:longlong2001
  • liaogd
  • interestc
  • jyc_nj

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo