写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事?least = MIN(*p++, b)
来源:互联网 发布:php死循环设置不超时 编辑:程序博客网 时间:2024/05/14 20:24
#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 )都应判0分;
(2) 防止宏的副作用。
宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是:((*p++) <= (b) ? (*p++) : (b)) 这个表达式会产生副作用,指针p会作两次++自增操作。除此之外,另一个应该判0分的解答是:#define MIN(A,B) ((A) <= (B) ? (A) : (B));
这个解答在宏定义的后面加“;”,显示编写者对宏的概念模糊不清,只能被无情地判0分并被面试官淘汰。
MIN(*p++, b)会产生宏的副作用
剖析:
这个面试题主要考查面试者对宏定义的使用,宏定义可以实现类似于函数的功能,但是它终归不是函数,而宏定义中括弧中的“参数”也不是真的参数,在宏展开的时候对“参数”进行的是一对一的替换。程序员对宏定义的使用要非常小心,特别要注意两个问题:
(1) 谨慎地将宏定义中的“参数”和整个宏用用括弧括起来。所以,严格地讲,下述解答:
#define MIN(A,B) (A) <= (B) ? (A) : (B)
#define MIN(A,B) (A <= B ? A : B )都应判0分;
(2) 防止宏的副作用。
宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是:((*p++) <= (b) ? (*p++) : (b)) 这个表达式会产生副作用,指针p会作两次++自增操作。除此之外,另一个应该判0分的解答是:#define MIN(A,B) ((A) <= (B) ? (A) : (B));
这个解答在宏定义的后面加“;”,显示编写者对宏的概念模糊不清,只能被无情地判0分并被面试官淘汰。
1 0
- 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事?least = MIN(*p++, b)
- 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个
- 2 . 写一个 "标准"宏 MIN ,这个宏输入两个参数并返回较小的一个
- 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个?
- 每日一题(9)—— 写一个标准宏MIN,这个宏输入两个参数并返回较小的一个
- 写一个标准宏MIN,输入两个参数,返回较小的
- 写一个“标准”宏,这个宏输入两个参数并返回较小的一个
- 写一个标准宏输入两个参数返回较小的一个
- 一个min的宏
- 对min(a,b)这个宏的讨论(转)
- 对min(a,b)这个宏的讨论
- 用指针返回两个数中较小的一个
- java面试题解惑:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 当你输入一个网址的时候,实际会发生什么?(很好的一篇文章)
- 当你输入一个网址的时候,实际会发生什么?
- 当你输入一个网址的时候,实际会发生什么?
- 当你输入一个网址的时候,实际会发生什么?
- 当你输入一个网址的时候,实际会发生什么?
- CWnd可以处理什么消息什么消息,CCmdTarget可以处理什么什么消息
- Android开源项目发现---ActionBar篇(持续更新)
- Android UI学习笔记之 MultiAutoCompleteTextView和AutoCompleteTextView
- Confluence 查找结果(Search Results)宏
- java中的堆、栈和常量池
- 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事?least = MIN(*p++, b)
- Android开源项目发现---Menu 篇(持续更新)
- Smart_ptr
- linux关闭防火墙
- java把excel数据写入Oracle数据库(.xls文件)
- Srtuts2实现登录界面(不连接数据库)报错(四)
- Android开源项目发现---ViewPager 、Gallery 篇(持续更新)
- Java 8里面的java.util.Random
- Android开源项目发现---GridView 篇(持续更新)