野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 551730|回复: 1346

【每日一题】 宏定义 比较两个数大小 [嵌入式校园招聘笔试题]

  [复制链接]
发表于 2014-10-10 11:22:49 | 显示全部楼层 |阅读模式
该题目经常被全国各大公司用于校园招聘笔试题目

知识点:标识符#define的应用
题目:写一个"标准"MIN ,这个宏输入两个参数并返回较小的一个。
答案:答题回复可见,请做题。

[code=c]#define MIN(A,B) ( (A) <= (B) ? (A) : (B) )[/code]

思考:
1、标识符#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。
2、三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。
3、懂得在宏中小心地把参数用括号括起来(要养成这样的好习惯)
4、我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?least = MIN(*p++, b);

回复

使用道具 举报

发表于 2014-10-10 11:26:17 | 显示全部楼层
#Define YEAR_SEC 31536000
回复 支持 反对

使用道具 举报

发表于 2014-10-10 11:26:34 | 显示全部楼层
#define min(a,b) a>b?b:a
回复 支持 1 反对 0

使用道具 举报

发表于 2014-10-10 11:28:12 | 显示全部楼层
为啥我看到的题目不是这个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 11:28:52 | 显示全部楼层
24841500 发表于 2014-10-10 11:26
#define min(a,b) a>b?b:a

注意括号的使用
回复 支持 1 反对 0

使用道具 举报

发表于 2014-10-10 11:29:50 | 显示全部楼层
#define MIN(a,b) (a>b)?b:a
回复 支持 反对

使用道具 举报

发表于 2014-10-10 11:31:03 | 显示全部楼层
本帖最后由 dajin1234 于 2014-10-10 11:32 编辑

#define MIN(x,y) ((x) <= (y) ? (x) : (y))  
回复 支持 反对

使用道具 举报

发表于 2014-10-10 13:23:01 | 显示全部楼层
#define MIN(x,y) ((x) <= (y) ? (x) : (y)) 最安全
回复 支持 6 反对 0

使用道具 举报

 楼主| 发表于 2014-10-10 14:19:28 | 显示全部楼层
刀_口 发表于 2014-10-10 11:29
#define MIN(a,b) (a>b)?b:a

弱爆啦。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2014-10-10 16:07:38 | 显示全部楼层
本帖最后由 carollim 于 2014-10-10 16:09 编辑

#define MIN(a,b) (a>b)?a:b
回复 支持 反对

使用道具 举报

发表于 2014-10-10 16:16:25 | 显示全部楼层
学习中强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-10-10 16:26:24 | 显示全部楼层
#define  MIN(a,b)  ((a-b>0)? b:a)
回复 支持 反对

使用道具 举报

发表于 2014-10-10 17:20:31 | 显示全部楼层
不会啊,看看答案~~~
回复 支持 反对

使用道具 举报

发表于 2014-10-10 17:22:47 | 显示全部楼层
也是不会啊。。。。看答案
回复 支持 反对

使用道具 举报

发表于 2014-10-10 17:34:10 | 显示全部楼层
#define MIN(x,y) ((x) <= (y) ? (x) : (y))
回复 支持 反对

使用道具 举报

发表于 2014-10-10 17:46:48 | 显示全部楼层
#define MIN(x,y) (x)<=(y)?(x)y)
回复 支持 反对

使用道具 举报

发表于 2014-10-10 19:26:29 | 显示全部楼层
#define MIN(X,Y) (X>Y?X:Y)
回复 支持 反对

使用道具 举报

发表于 2014-10-10 20:28:00 | 显示全部楼层
#define  MIN(a,b)    {(a)>(b)?(b)a)}
回复 支持 反对

使用道具 举报

发表于 2014-10-10 21:11:43 | 显示全部楼层
#define MIN(a,b)  ((a<b)?(a)b))
回复 支持 反对

使用道具 举报

发表于 2014-10-10 21:14:43 | 显示全部楼层
强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-10-10 21:44:36 | 显示全部楼层
看看答案!
回复 支持 反对

使用道具 举报

发表于 2014-10-10 22:02:02 | 显示全部楼层
看看是什么答案
回复 支持 反对

使用道具 举报

发表于 2014-10-10 22:02:02 | 显示全部楼层
看看是什么答案
回复 支持 反对

使用道具 举报

发表于 2014-10-10 23:03:47 | 显示全部楼层
#define MIN(a,b) (a<b)?a:b
回复 支持 反对

使用道具 举报

发表于 2014-10-10 23:09:27 | 显示全部楼层
#define MIN(A,B) (A)>=(B)?(B)A)
回复 支持 反对

使用道具 举报

发表于 2014-10-10 23:12:59 | 显示全部楼层
#define MIN(A,B) (A)>=(B)?(B)A)  上一条输入的内容,怎么会有个笑脸呢,再打一遍看下,还有没有。
回复 支持 反对

使用道具 举报

发表于 2014-10-10 23:14:59 | 显示全部楼层
#define MIN(A,B) (A)>=(B)?(B)A)   难道是因为输入的时候,用的是搜狗输入法的原因,换成另外一种输入法试一试,最后试一次。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-11 09:11:33 | 显示全部楼层
ArmLinux 发表于 2014-10-10 23:14
#define MIN(A,B) (A)>=(B)?(B)A)   难道是因为输入的时候,用的是搜狗输入法的原因,换成另外一种输入法 ...

对了。。。。。。。。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-11 09:11:50 | 显示全部楼层
gq21 发表于 2014-10-10 23:03
#define MIN(a,b) (a

出现等于的情况呢
回复 支持 反对

使用道具 举报

发表于 2014-10-11 09:43:01 | 显示全部楼层
本帖最后由 老阮 于 2014-10-11 09:44 编辑

#define MIN(DataA, DataB)  ((DataA>DataB) ? DataB : DataA)

要多加括号啊...

平时确实define用的少。。。最多就常数定义...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-11 09:44:56 | 显示全部楼层
老阮 发表于 2014-10-11 09:43
#define MIN(DataA, DataB)  ((DataA>DataB) ? DataB : DataA)

要多加括号啊...

这样是比较出来了,但是返回后到底是哪个啊
回复 支持 反对

使用道具 举报

发表于 2014-10-11 10:28:07 | 显示全部楼层
#define min(a,b) a>b?b:a
回复 支持 反对

使用道具 举报

发表于 2014-10-11 14:31:58 | 显示全部楼层
我是来看答案的
回复 支持 反对

使用道具 举报

发表于 2014-10-11 14:52:32 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2014-10-11 17:35:30 | 显示全部楼层
来学习一下
回复 支持 反对

使用道具 举报

发表于 2014-10-11 19:14:10 | 显示全部楼层
#define MIN(X,Y) return (X>Y)?Y:X;
回复 支持 反对

使用道具 举报

发表于 2014-10-11 20:26:49 | 显示全部楼层
#define MIN 100

回复 支持 反对

使用道具 举报

发表于 2014-10-11 21:14:02 | 显示全部楼层
#define MIN(a,b) ((a)<(b)?(a)b))
回复 支持 反对

使用道具 举报

发表于 2014-10-11 21:27:59 | 显示全部楼层
强烈支持,非常感谢哥们强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-10-11 21:29:17 | 显示全部楼层
学习了强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-10-11 21:48:29 | 显示全部楼层
走过路过,不能错过走过路过,不能错过走过路过,不能错过走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2014-10-11 21:49:20 | 显示全部楼层
走过路过,不能错过走过路过,不能错过走过路过,不能错过走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2014-10-11 22:35:49 | 显示全部楼层
来试试水平
回复 支持 反对

使用道具 举报

发表于 2014-10-12 10:16:35 | 显示全部楼层
#define MIN(X,Y)    (if(X>=Y)return Y;else return X;)
回复 支持 反对

使用道具 举报

发表于 2014-10-12 18:22:53 | 显示全部楼层
#define MIN(a,b) (a<b)?a:b
回复 支持 反对

使用道具 举报

发表于 2014-10-12 18:30:50 | 显示全部楼层
#define MIN(A,B) (A)>=(B)?(B)A)
回复 支持 反对

使用道具 举报

发表于 2014-10-12 19:40:53 | 显示全部楼层
抢沙发~给哥们顶一个
回复 支持 反对

使用道具 举报

发表于 2014-10-12 21:44:13 | 显示全部楼层
#define min(a, b)  ((a) <=  (b))? (a)b) )  最外面一层加括号可以避免 在define 替换文本后 因为优先级的问题 导致运算偏离本意 而里面也是同样的道理  避免前面用define 定义的a 没有加括号 导致文本替换后出现错误
回复 支持 5 反对 0

使用道具 举报

发表于 2014-10-12 22:56:52 | 显示全部楼层
#define min(a,b) (a>b)?b:a
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-12 23:01:37 | 显示全部楼层
我不是二货 发表于 2014-10-12 21:44
#define min(a, b)  ((a)

二货分析的不错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-3-29 20:01 , Processed in 0.049864 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表