野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 524647|回复: 1104

【每日一题】 预处理器- Preprocessor [嵌入式校园招聘笔试题]

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

知识点:预处理器(Preprocessor
题目:用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
答案:答题回复可见,请做题。
[code=c]#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL[/code]

思考:
1、#define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)
2、懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒
   而不是计算出实际的值,是更清晰而没有代价的。

3、意识到这个表达式将使一个16位机的整型数溢出,因此要用到长整型符号L,
   告诉编译器这个常数是的长整型数。
4、如果你在你的表达式中用到UL(表示无符号长整型)。

回复

使用道具 举报

 楼主| 发表于 2014-10-9 11:00:12 | 显示全部楼层
我敢保证80%的人都不能答对,不信你们就做题。
回复 支持 1 反对 0

使用道具 举报

发表于 2014-10-9 11:03:02 | 显示全部楼层
居然还是回复帖
回复 支持 反对

使用道具 举报

发表于 2014-10-9 11:03:53 | 显示全部楼层
不知道  抢沙发~给哥们顶一个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-9 11:05:17 | 显示全部楼层
24841500 发表于 2014-10-9 11:03
居然还是回复帖

游客就没必要做题了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-9 11:05:55 | 显示全部楼层
24841500 发表于 2014-10-9 11:03
居然还是回复帖

我出这个每日一题就是为了提高开发板用户的 C 语言 水平
回复 支持 反对

使用道具 举报

发表于 2014-10-9 11:10:46 | 显示全部楼层
#define time (365*24*60*60)ul    ?
回复 支持 反对

使用道具 举报

发表于 2014-10-9 11:11:24 | 显示全部楼层
还好对了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-9 11:11:55 | 显示全部楼层
刀_口 发表于 2014-10-9 11:10
#define time (365*24*60*60)ul    ?

有意思            刀逼            
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-9 11:14:13 | 显示全部楼层
刀_口 发表于 2014-10-9 11:10
#define time (365*24*60*60)ul    ?

为了养成好习惯  time 记得  大写,避免跟平时使用的变量混淆

宏还有一个原则是见名知意,所以 time 换成 SECONDS_PER_YEAR 会更好
回复 支持 2 反对 0

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2014-10-9 11:16:20 | 显示全部楼层
刀_口 发表于 2014-10-9 11:11
还好对了

如果你的程序里面有 time 的变量的话,那结果如何?
回复 支持 反对

使用道具 举报

发表于 2014-10-9 11:21:41 | 显示全部楼层
抢沙发~给哥们顶一个      上课无聊看看,可惜已经知道答案。。
回复 支持 反对

使用道具 举报

发表于 2014-10-9 11:23:22 | 显示全部楼层
火哥 我来看看这题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-9 11:25:42 | 显示全部楼层
芯儿 发表于 2014-10-9 11:21
抢沙发~给哥们顶一个      上课无聊看看,可惜已经知道答案。。

会有难的,每天来一题。
回复 支持 反对

使用道具 举报

发表于 2014-10-9 11:40:46 | 显示全部楼层
fire 发表于 2014-10-9 11:16
如果你的程序里面有 time 的变量的话,那结果如何?

随意写的,正式代码都如你所说
回复 支持 反对

使用道具 举报

发表于 2014-10-9 12:16:05 | 显示全部楼层
#define SECOND_IN_YEAR (long)(365*60*60*24) 是这样吗?
回复 支持 反对

使用道具 举报

发表于 2014-10-9 13:07:50 | 显示全部楼层
#define S_YEAR (__IO uint32_t)(365 * 24 * 3600)
回复 支持 反对

使用道具 举报

发表于 2014-10-9 13:33:45 | 显示全部楼层
啊打发等我上是山东省
回复 支持 反对

使用道具 举报

发表于 2014-10-9 14:01:30 | 显示全部楼层
#ifndef YearSecond
#define YearSecond  (365*24*60*60)L
#endif
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-9 15:02:31 | 显示全部楼层
Ω囿圉Ω 发表于 2014-10-9 14:01
#ifndef YearSecond
#define YearSecond  (365*24*60*60)L
#endif

哈哈,不错不错
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2014-10-9 15:02:40 | 显示全部楼层
翻不完的夏天 发表于 2014-10-9 13:33
啊打发等我上是山东省

啥子意思。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2014-10-9 15:56:18 | 显示全部楼层
学习一下学习一下学习一下
回复 支持 反对

使用道具 举报

发表于 2014-10-9 16:25:16 | 显示全部楼层
#define TINE_YEAR (365*24*60*60)吗??怎么感觉怪怪的
回复 支持 反对

使用道具 举报

发表于 2014-10-9 19:19:03 | 显示全部楼层
注意点是 括号么?
回复 支持 反对

使用道具 举报

发表于 2014-10-10 16:27:49 | 显示全部楼层
不会。。。
回复 支持 反对

使用道具 举报

发表于 2014-10-10 16:34:24 | 显示全部楼层
#define YEAR_SEC (long)(365*24*60*60)
回复 支持 反对

使用道具 举报

发表于 2014-10-10 17:15:36 | 显示全部楼层
为了学习而来的。。。。。
回复 支持 反对

使用道具 举报

发表于 2014-10-10 18:14:27 | 显示全部楼层
#define i 60*60*24*365
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2014-10-10 22:06:04 | 显示全部楼层
((365*24*60*60)L)
回复 支持 反对

使用道具 举报

发表于 2014-10-10 23:28:41 | 显示全部楼层
#define  SECONDTOTAL  365*24*60*60   那个名字不知怎么表示更好,常因取名纠结
回复 支持 反对

使用道具 举报

发表于 2014-10-10 23:31:51 | 显示全部楼层
恩,吸取教训,重写一遍,#define SECOND_PER_YEAR (365 * 24 * 60 * 60)UL
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-11 09:07:02 | 显示全部楼层
ArmLinux 发表于 2014-10-10 23:28
#define  SECONDTOTAL  365*24*60*60   那个名字不知怎么表示更好,常因取名纠结

宏名  见名知意最好
回复 支持 反对

使用道具 举报

发表于 2014-10-11 09:45:33 | 显示全部楼层
#define  AllSeconds   ((unsigned long)365*24*3600)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-11 09:50:42 | 显示全部楼层
老阮 发表于 2014-10-11 09:45
#define  AllSeconds   ((unsigned long)365*24*3600)

binggo....................................
回复 支持 反对

使用道具 举报

发表于 2014-10-11 10:39:48 | 显示全部楼层
#define MIAO_PER_YEAR (60*60*24*365)UL
回复 支持 反对

使用道具 举报

发表于 2014-10-11 12:43:20 | 显示全部楼层
fire 发表于 2014-10-9 15:02
啥子意思。。。。。。。。。。。。

山东蓝翔?
回复 支持 反对

使用道具 举报

发表于 2014-10-11 14:15:35 | 显示全部楼层
#define  YEAR  (DAY*365)
#define  DAY   (HOUR*24)
#define  HOUR  (SEC*3600)
#define  SEC   1
回复 支持 反对

使用道具 举报

发表于 2014-10-11 15:05:44 | 显示全部楼层

#define SECOND_IN_YEAR (long)(365*60*60*24)
回复 支持 反对

使用道具 举报

发表于 2014-10-11 20:30:11 | 显示全部楼层
#define TIME (365*30*60*60)ul
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-11 20:58:15 | 显示全部楼层
高江涛 发表于 2014-10-11 20:30
#define TIME (365*30*60*60)ul

30是啥意思           
回复 支持 反对

使用道具 举报

发表于 2014-10-11 22:21:59 | 显示全部楼层
打错了  本来想着一个月30天   这里应该是24  指的是一天游24小时
回复 支持 反对

使用道具 举报

发表于 2014-10-11 22:46:33 | 显示全部楼层
自己在纸上谢了一下,来对对答案
回复 支持 反对

使用道具 举报

发表于 2014-10-11 22:49:16 | 显示全部楼层
为什么ul要写在后边
回复 支持 1 反对 0

使用道具 举报

发表于 2014-10-12 09:15:28 | 显示全部楼层
比雷公还雷人哦~
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2014-10-12 21:54:41 | 显示全部楼层
#define YEAR_SECOND (unsinged long)(360*24*3600) 避免int time = YEAR_SECOND; 时int 溢出 ,将int换成高精度的LN?
回复 支持 反对

使用道具 举报

发表于 2014-10-12 22:51:51 | 显示全部楼层
#define time 365*24*60*60
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-12 23:03:50 | 显示全部楼层
曦亦 发表于 2014-10-12 22:51
#define time 365*24*60*60

注意宏名的命名
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 09:39 , Processed in 0.071326 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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