之前看到的一篇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
指针!!啥都不能改…