野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 584479|回复: 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:28:52 | 显示全部楼层
24841500 发表于 2014-10-10 11:26
#define min(a,b) a>b?b:a

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

使用道具 举报

 楼主| 发表于 2014-10-10 14:19:28 | 显示全部楼层
刀_口 发表于 2014-10-10 11:29
#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:44:56 | 显示全部楼层
老阮 发表于 2014-10-11 09:43
#define MIN(DataA, DataB)  ((DataA>DataB) ? DataB : DataA)

要多加括号啊...

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

使用道具 举报

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

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

使用道具 举报

 楼主| 发表于 2014-10-12 23:02:10 | 显示全部楼层
曦亦 发表于 2014-10-12 22:56
#define min(a,b) (a>b)?b:a

你这个求的是大的那个数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-13 09:25:48 | 显示全部楼层
zyj 发表于 2014-10-13 09:06
貌似不能加分号

宏定义都没有分号

因为 程序里面的语句已经有分号了,如果宏里面有分号的话,那到时候程序编译的时候,宏一扩展的话那就两个分号了,两个分号是啥子意思啊
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 06:55 , Processed in 0.044750 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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