kcjf.net
当前位置:首页 >> C语言 设有如下宏定义:#DEFinE A 3+2 #DEFinE B A*... >>

C语言 设有如下宏定义:#DEFinE A 3+2 #DEFinE B A*...

你好!C语言中的宏,在编译时,进行简单替换.也就是说 当你算B*B时 编译器会把它变为A*A*A*A3+2*3+2*3+2*3+2 = 23 因为你没有写括号也就是#define A (3+2) 所以不是你预想的 (3+2)*(3+2)*(3+2)*(3+2) 所以说宏是简单替换,不会帮你把运算优先级也编译出来.这个是一个常见的宏问题.我的回答你还满意吗~~

宏定义需要把握“原样代入”的原则,不要自己主管加括号z=2*(N*Y(5+1))=2*(N*(N+1*5+1))=2*(3*(3+1*5+1))=2*(3*9)=2* 27=54选择D

宏替换是原样替换,不会加括号SQR(3+4)替换为2*3+4*3+4=22

1 (a++)*b++ = 3*4 = 122 出这个题目的人自己可能都没有考虑全.这种情况谁也没规定编译器该怎么做.不同的编译器出来的结果都可能不一样.

预处理运算符# #为宏扩展提供了一种连接实际变元的手段.如果替换文本中的参数用 # #相 连,那么参数就被实际变元替换, # #与前后的空白符被删除,并对替换后的结果重新扫描.例 如,下面定义的宏p a s t e用于连接两个变元:#define paste( front, back ) front ## back 从而宏调用paste(name, 1)的结果是建立单词n a m e 1.

因为一旦a或b代入的表达式中 有比< 运算优先级更小的运算符 运算的优先级会被改变 得到的可能不是原来想要的结果

这一块我学的不是很明白,建议去CSDN看下高手的博客或者看下百度文库的文章!http://blog.csdn.net/snowboy225/article/details/4038797应该是22Define SUM就是简单的代数替换,不同于咱们正常的计算,那么#define sum 2+35+sum*5=5+2+3*5=22,SUM后面的乘以5就是乘以SUM定义的2+3最后面的3就可以了,希望能帮到你~~

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.kcjf.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com