题目:

#include<iostream>
using namespace std;#define SQR(X) X*Xint main(void)
{int a = 10;int k = 2;int m = 1;a /= SQR(k+m)/SQR(k+m);printf("%d\n",a);return 0;
}

这道题目的结果是什么啊?

【解答】
典型错误1:
SQR(k+m)/SQR(k+m) = 1;
最后得到a = 10;
原因:#define 只是宏定义而已,在编译前会将#define定义的内容进行替换,然后进行编译。这一点与函数大不相同。结果认为是10,很可能将SQR这个宏定义当作函数来用了。

典型错误2:
进行宏替换,得:
a   /=   (k+m)*(k+m)/(k+m)*(k+m);
=> a   /=   (k+m)*1*(k+m);
=> a   =   a/9;
=> a   =   1;

原因:宏替换是按照宏定义进行的严格不变的替换,所以上面的替换结果应该为:
a   /=   k+m*k+m/k+m*k+m;
=> a /= 2+1*2+1/2+1*2+2;
=> a /= 7;
=> a = 1;

【评析】
该题目主要考查两点:
1、慎用宏定义,如果需要用宏,考虑是否可以通过函数、模板、或const定义等代替之。例如本题,使用函数实现可以轻松避免以上问题。
2、宏定义的方式:在所有参数上一定要加括号。本题中#define SQR(X) X*X 就属于不良风格的宏定义方式,良好的风格应该为:#define SQR(X) (X)*(X),这样,计算的结果就是a   /=   (k+m)*(k+m)/(k+m)*(k+m),最后结果仍为1。或者定义为:#define SQR(X) ((X)*(X)),这样最后的结果是10。

一道关于宏的面试题及解答相关推荐

  1. 转自知乎 知乎ID@方志宏 记一道简单的Java面试题

    记一道简单的Java面试题 这可能是历史上最简单的一道Java面试题 题目很简单,完成代码,判断一个整数是否是奇数 public boolean isOdd(int i) 相信相当数量的人都在已经准备 ...

  2. 记一道简单的Java面试题,但答错率很高!

    作者:方志宏 https://zhuanlan.zhihu.com/p/57859872 这可能是历史上最简单的一道java面试题了. 题目很简单,完成代码,判断一个整数是否是奇数: public b ...

  3. 浙江大学数学专业考研试题参考解答

    浙江大学2009年数学分析考研试题参考解答 浙江大学2010年数学分析考研试题参考解答 浙江大学2011年数学分析考研试题参考解答 浙江大学2012年数学分析考研试题参考解答 浙江大学2013年数学分 ...

  4. python fun_一道神奇的Python面试题,你会吗?

    原标题:一道神奇的Python面试题,你会吗? 无意间,看到这么一道Python面试题:以下代码将输出什么? def testFun: temp = [lambda x : i*x for i in ...

  5. 一道经典的JavaScript面试题

    一道经典的JavaScript面试题 转载于:https://www.cnblogs.com/suoking/p/5227430.html

  6. 历届试题_历届国际物理奥林匹克竞赛试题与解答,解锁竞赛难题,高效提分

    学习物理竞赛,刷题是无法绕过的一个过程. 所谓刷题就是我们把学来的知识应用到具体模型中的过程.正如一个人在岸上是无法学会游泳的,一个人也永远无法在不做题的前提下学好物理竞赛. 刷题的另一个作用是增强自 ...

  7. 2021年 第13届 全国大学生数学竞赛 初赛(非数学类)试题详细解答

    [2020年第12届全国大学生数学竞赛--资源分享 ][1~11届省赛决赛考题及题解(数学类.非数学类).推荐学习网址.复习备考书籍推荐] 2019年 第11届 全国大学生数学竞赛 初赛(非数学类)试 ...

  8. 厦门大学2016年高等代数考研试题参考解答

    张祖锦第7卷第488期厦门大学2016年高等代数考研试题参考解答[5932-5953] (link, 视频讲解) 题目: http://bbs.sciencenet.cn/thread-3092647 ...

  9. 计算机办公高级试题,高级办公软件试题及解答

    <高级办公软件试题及解答>针对原劳动和社会保障部(现已改为人力资源和社会保障部)全国计算机信息高新技术考试中的办公软件应用模块(Windows平台),内容涵盖了高级操作员级试题库的全部试题 ...

最新文章

  1. linux网络虚拟化
  2. node.js发送邮件
  3. 【Siddhi】Siddhi 如何表示布尔 Syntax error in SiddhiQL, mismatched input ‘boolean
  4. Java 7 最快要到 2012 年中发布
  5. vc与三菱PLC编程口通信C语言源代码,三菱PLC通讯与编程实例!
  6. zookeeper和ZAB协议
  7. 图解GC(垃圾回收)复制算法加强版(1)Cheney的复制算法
  8. android 后台自动拍照,Android实现后台服务拍照功能
  9. IGBT是啥?看完这篇文章你还不明白就不要再做电子行业。
  10. 设计师必备的在线配色网
  11. 回归分析过程实例(练习)
  12. Azkaban (一) --------- Azkaban 概论
  13. 深入理解Java虚拟机 笔记
  14. 机车出入库相关、调车转线、、后期杂谈
  15. ODBC Excel驱动程序登陆失败
  16. 华为AP4050DN-HD使用tftp、uboot瘦转胖
  17. 钢材规格解读的软件_钢材的理论重量计算软件
  18. PHP执行系统命令函数
  19. 普中科技HC6800-EM3 V3.0单片机开发板资料
  20. loadrunner 函数说明

热门文章

  1. 重磅发布|新一代云原生数据仓库AnalyticDB「SQL智能诊断」功能详解
  2. 云上创新 | 阿里云边缘云场景化商业实践
  3. 换个角度入门 K8s
  4. 游戏关卡中的类型运用:《LOOP》的无限可能
  5. 手游行业洞察:Project Makeover成爆款,中国手游出海如何破局
  6. SQL基础【十二、Like】
  7. Resin 的 watchdog(看门狗)介绍
  8. 软件技术支持职责和能力要求(偏软件方向)
  9. ArcGIS 10.0 ArcGIS 9.3.1数据生成实验--个人地理数据库
  10. BZOJ1061: [Noi2008]志愿者招募