2020-08-19

之前看到的一篇07年的文章,没错,也是在在csdn上。关于面试嵌入式程序员的十个细节问题,感觉不错。这里挑选几个基础的转载一下,也趁次机会自己独立重复,加深印象。

一、用预处理指令define声明一个常数,用以表面一年中有多少秒。
答案:#define SECONDS_PER_YEAR(606024*365)UL

这里应该是最基础的嵌入式知识了。
1.define的用法(不能以分号结束,括号的使用等等)
2.在嵌入式里面,很少会直接定义一个结果数值,大多数会给出计算过程,这里用606024*365,而不是直接给结果。
3.这个计算结果会使16位机的整形数溢出,因此用到长整型L,
4.嵌入式里面UL即unsinged long 反正我是C++转过来的,这里还刚刚熟悉缩写

二、写一个标准宏,MIN,输入两个参数返回最小的那个。
答案:#define MIN(A,B)((A)<=(B)?(A):(B))

点评:1.按照程序员的思路,可能是编写一个函数,实现这个功能,但是在嵌入式里面,(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法。
2.三目运算符
3.括号的细节使用,具体还是考察三目运算符
4.宏的副作用,比如这样的代码会报什么错:
least=MIN(*p++,b);

三、预处理器标识#error的目的是什么?
这里我看到的参考文章没有给出答案,笔者感觉#error的目的无非就是编译报错,让程序按照程序员想要的方式去运行(这里狗头保命…)

四、死循环
有三种
while(1)……
for(;😉……
goto……
作为嵌入式的小白,平常看代码基本都是while(1)这种方式,其实三种都可以,看个人喜好吧。

五、数据声明(这里是最头晕的)
1.一个整形数(int a)
2.一个指向整形数的指针(int *a)
3.一个指向指针的指针,它指向的指针指向一个整形数…听起来有点绕口(int **a)
4.一个有10个整形数的数组(int a[10])
5.一个有10个指针的数组,指针指向整形数(int *a[10])
6.一个指向有10个整形数数组的指针(int (*a) [10])
7.一个指向函数的指针,该函数有一个整形参数并且返回也是整形
int (*a)(int)
8.一个有10个指针的数组,指针指向函数,函数有一个整形参数且返回整形
int(*a[10])(int)

这里怎么也得写出来前六个吧…

六、关键字static的作用
答案:1.在函数体,一个被声明为静态的变量,在函数调用中不会改变(这是我们大多数人都知道的)
2.在模块内,函数体外声明的变量,可以被模块内所有函数访问,但是不能被模块外函数访问。(这里牵扯到全局变量,局部变量)
3,static也可以声明函数,具体效果同2。

七、关键字const有什么含义
这是个老生常谈的问题了,无论是不是嵌入式程序员,只要是程序员,都应该懂的。这里可以解读下面几个表达式,不多说了。
const int a
int const a
这俩都是代表一个整形常数…
const int *a
指针!!!指向常数的指针!!指向的那个数,不可改,但指针可以。
int * const a
指针!!指向常数的指针!!指向的数可改,指针不可改!
int const *a const
指针!!啥都不能改…

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值