16道c语言面试例子【2】:

2.写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(x,y) ((x)<=(y)?(x):(y))
这个测试是为下面的目的而设置的:
1):标识#define在宏中应用的基本知识。这是很重要的,因为在没有嵌入(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的办法。
2):三重条件操作符的知识。这个操作符存在c语言中的原因是它使编译器能产生比if then else更优化的代码,了解这个用法很重要。
3):懂得在宏中小心地把参数用括号括起来。
4):我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?
least = MIN(*p++,b);
【关于least = MIN(*p++,b);这个问题原作者并没有回答。我想这里可能是考虑到++优先于*,这样的话传进来的就是一个野指针了。可作者说的是考宏的副作用。于是我google了一下,在这个博客找到了不错的答案:http://www.cnblogs.com/haimingwey/archive/2012/05/25/2518219.html】
原文如下:

一道思考题:

写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你运行”least = MIN(*p++, b); “代码时会发生什么事?

解答: #define MIN(A,B)  ( (A) <= (B) ?  (A) : (B) )     MIN(*p++, b)会产生宏的副作用。
剖析: 这道题考察对宏定义的使用,宏定义可以实现类似于函数的功能,但是它终归不是函数,而宏定义中括弧中的“参数”也不是真的参数,在宏展开的时候对“参数”进行的是一对一的替换。             程序员对宏定义的使用要非常小心,特别要注意两个问题:
(1)谨慎地将宏定义中的“参数”和整个宏用用括弧括起来。所以,严格地讲,下
          述解答: #define MIN(A,B) (A) <= (B) ? (A) : (B)       #define MIN(A,B) (A <= B ? A : B )  都是错误的。
(2)防止宏的副作用。宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是: ((*p++) <= (b) ? (*p++) : (b)) 这个表达式会产生副作用,指针p会作二次++自增操作。
          除此之外,另一个典型的错误解答是: #define MIN(A,B) ((A) <= (B) ? (A) : (B)); 这个解答在宏定义的后面加“;”,显示编写者对宏的概念模糊不清。

转载于:https://blog.51cto.com/4893836/1008605

0927_C/C++笔试题_10:16道c语言面试例子【2】相关推荐

  1. 1004_C/C++笔试题_13:16道c语言面试【8/9】

    8.关键字volatile含义,并给出三个不同的例子. 一个定义为volatile的变量是说这个变量可能会被意想不到的改变.因此,优化器在每次用到这个变量时都要重新读取这个值,而不是使用在寄存器里的备 ...

  2. java经典笔试题大全(50道含答案)

    java经典笔试题大全(50道含答案)整理了一套常用的Java笔试题,选择题50道,简答题5道,试试你能做对多少题吧,含答案. 选择题(共50题,每题1.5分,共75分.多选题选不全或选错都不得分.) ...

  3. 面试题:460道Java后端面试高频题答案版「模块九:Spring」

    Spring 写在前面 相信对于 Spring 这个模块,只要是做过 Java 开发的同学都是不陌生的,或多或少都使用过 Spring 体系的框架.对于平时自己做点小项目会写配置文件可能就行了,但是对 ...

  4. 2014创新工场校园招聘笔试题(9.16北京)

    选择题 1. 若进栈序列为a.b.c.d,进栈过程中可以出栈,那么()不可能是一个出栈序列. A.cbad     B.bdca     C.adbc    D.cdba 2. 完全二叉树中编号为i的 ...

  5. 小米2013校园招聘笔试题的第一道程序设计题

    1.数组乘积(15分) 输入:一个长度为n的整数数组input 输出:一个长度为n的整数数组result,满足result[i] = input数组中除了input[i]之外所有数的乘积(假设不会溢出 ...

  6. 上海伯俊软件测试笔试题,【上海伯俊软件面试|面试题】-看准网

    本来面试的实施顾问职位,填完基础信息资料后,HR就给我产品经理试题给我做,直接表示拒绝,和HR确认面试实施顾问职位后,给我找了份项目经理的笔试题目.项目经理笔试题目分三部分:1.SQL基础题5道,主要 ...

  7. 南京擎天科技公司java笔试题_南京擎天科技 笔试面试 经验

    10月22号下午,南京擎天到我们学校宣讲会,Hr侃侃而谈两个小时,大概16点开始笔试,笔试纪律很严格,报java和C方向插入坐,相当于两个C方向的学生中间隔了3个座位.发试题,两沓,一份试卷,一份答题 ...

  8. 华夏银行招聘计算机笔试题,2019华夏银行招聘结构化面试试题及答案

    [导语]银行考试综合部分主要会涉及以下几个方面,包括:经济学.国际金融.货币银行.会计基础.管理学.市场营销.经济法.计算机基础.时事政治.无忧考网为大家整理的<2019华夏银行招聘结构化面试试 ...

  9. 2019腾讯实习笔试题部分记录+两次电话面试笔记

    第一题:有n层的一座塔,跳塔 有n层的一座塔,每层高度不一样,现在小Q去爬塔,有如下特性:他爬塔的速度恒定,也就是说爬每一层的用时和这一层的高度成正比.但是他有一个能力:他可以有一种魔法,这个魔法可以 ...

最新文章

  1. AI打败外科医生:机器人做手术,你敢来一刀吗?
  2. 【HDOJ】4333 Revolving Digits
  3. Codeforces Round #183 (Div. 2) C
  4. sqlplus登录Oracle时ORA-01017: invalid username/password; logon denied的错误
  5. xBIM 基础16 IFC的空间层次结构
  6. Halcon阈值分割方法简析
  7. 鸿蒙系统正式开源,余承东:鸿蒙系统正式开源,友商也可以使用!
  8. 加装的硬盘进入后点不了文件夹_【装机帮扶站】第638期:空间不够,那就加加加!机械硬盘推荐~...
  9. 8bit黑白图像的灰度值范围是_窗宽窗位对基于互信息的医学图像
  10. 坏了坏了,以后用/proc读取Linux系统信息可能要给联想交专利费了
  11. linux命令:常用shell命令及应用
  12. 华为鸿蒙系统再公测,安卓再见!华为正式发布鸿蒙系统公测版!
  13. jquery实现截取pc图片_html+jquery实现简单图片裁剪
  14. python类库31[命令行解析]
  15. 维码扫描之集成Zxing
  16. uni-app APP横屏和竖屏
  17. vue3关闭语法错误提示
  18. 2019第八届“中国软件杯”大学生软件设计大赛赛题有哪些?
  19. brew安装php-ffmpeg,macos安装ffmpeg以及出现问题的解决方案,一次成功
  20. 基于Python图书馆座位预约系统设计与实现 开题报告

热门文章

  1. 机器人能力再进化,组装宜家椅子只需20分钟! | Science Robotics论文
  2. “现有人工智能都是二流的”
  3. 洛谷 P3359 改造异或树
  4. 在Delphi中获取和修改文件的时间
  5. poj1019(打表预处理+数学)
  6. img内联块元素的操作
  7. Ubuntu Touch未来支持对用户数据加密
  8. 无core文件根据系统日志查找 程序core信息
  9. CentosX64使用yum快速搭建xen虚拟化环境
  10. 深入理解JavaScript内部原理(5): function