`
yangyou230
  • 浏览: 1652015 次
文章分类
社区版块
存档分类

写一个“标准”宏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 )都应判0分;

(2) 防止宏的副作用。

  宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是:((*p++) <= (b) ? (*p++) : (*p++)) 这个表达式会产生副作用,指针p会作三次++自增操作。除此之外,另一个应该判0分的解答是:#define MIN(A,B) ((A) <= (B) ? (A) : (B));
这个解答在宏定义的后面加“;”,显示编写者对宏的概念模糊不清,只能被无情地判0分并被面试官淘汰。
分享到:
评论

相关推荐

    CC++面试题目大全

    写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。

    面试读-经典嵌入式面试题

    预处理器(Preprocessor) 1 . 用预处理指令#define 声明一个常数,用以... 写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ( (A) (B) ? (A) : (B) ) 这个测试是为下面的目的而设的:

    ARM技术面试题

    2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) (B) (A) : (B)) 4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是...

    16道嵌入式C语言面试题

    1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年...2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) (B)?(A) : (B)) 这个测试是为下面的目的而设的:

    C++面试题汇总.doc

    先发基本问题,再发编程问题.......... 想成为嵌入式程序员应知道的0x10... 写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) (B) ? (A) : (B)) 这个测试是为下面的目的而设的:

    (二)就业模拟测试题-LINUX应用开发工程师职位

    1.写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。[5分] 参考答案:  #define MIN(A,B) ((A) (B) ? (A) : (B)) 解析: 这个测试是为下面的目的而设的:1) 标识#define在宏中应用的基本知识。这是很...

    嵌入式c语言的一些面试题

    1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) ;2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个;3. 预处理器标识#error的目的是什么?

    16道嵌入式C语言面试题

    预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 3. 预处理器标识#error的目的是什么?

    c常见面试题集锦.zip

    2. 写一个“标准”宏 MIN,这个宏输入两个参数并返回较小的一个。 3. 预处理器标识#error的目的是什么? 4. 嵌入式系统中经常要用到无限循环,你怎么样用 C 编写死循环呢? 5. 用变量 a 给出下面的定义 a) 一个整型...

    c/c++ 学习总结 初学者必备

    10、 写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个? 答: #define MIN(A,B) ((A) (B) ? (A) : (B)) 11、嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 答: 这个问题用几个解决方案。我...

    leetcode题库-iOS-Interview-Questions:收集整理iOS笔试面试题

    leetcode题库 iOS-Interview-Questions ...写一个宏MIN,这个宏输入两个参数并返回较小的一个 #define MIN(a,b) ((a)&gt;(b)?(b):(a)) 什么是KeyPath #import、#include、@class的区别? UIView和CALa

Global site tag (gtag.js) - Google Analytics