#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分并被面试官淘汰。
分享到:
相关推荐
写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
预处理器(Preprocessor) 1 . 用预处理指令#define 声明一个常数,用以... 写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ( (A) (B) ? (A) : (B) ) 这个测试是为下面的目的而设的:
2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) (B) (A) : (B)) 4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是...
1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年...2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) (B)?(A) : (B)) 这个测试是为下面的目的而设的:
先发基本问题,再发编程问题.......... 想成为嵌入式程序员应知道的0x10... 写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) (B) ? (A) : (B)) 这个测试是为下面的目的而设的:
1.写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。[5分] 参考答案: #define MIN(A,B) ((A) (B) ? (A) : (B)) 解析: 这个测试是为下面的目的而设的:1) 标识#define在宏中应用的基本知识。这是很...
1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) ;2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个;3. 预处理器标识#error的目的是什么?
预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 3. 预处理器标识#error的目的是什么?
2. 写一个“标准”宏 MIN,这个宏输入两个参数并返回较小的一个。 3. 预处理器标识#error的目的是什么? 4. 嵌入式系统中经常要用到无限循环,你怎么样用 C 编写死循环呢? 5. 用变量 a 给出下面的定义 a) 一个整型...
10、 写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个? 答: #define MIN(A,B) ((A) (B) ? (A) : (B)) 11、嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 答: 这个问题用几个解决方案。我...
leetcode题库 iOS-Interview-Questions ...写一个宏MIN,这个宏输入两个参数并返回较小的一个 #define MIN(a,b) ((a)>(b)?(b):(a)) 什么是KeyPath #import、#include、@class的区别? UIView和CALa