笔试经典题-精品文档资料整理.doc





《笔试经典题-精品文档资料整理.doc》由会员分享,可在线阅读,更多相关《笔试经典题-精品文档资料整理.doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)。#define SECONDS_PER_YEAR (365*24*60*60)UL2.写一个标准宏MIN,这个宏输入两个参数并返回较小的一个。#define MIN (A)=(B)?(A):(B)3.预处理器标识#error的目的是什么?#error 记号序列将使预处理器打印包含该记号序列的诊断信息。4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?While(1)5.用变量a给出下面的定义a)一个整型数(Aninteger)b)一个指向整型数的指针(Apointertoaninteger)c)一个
2、指向指针的的指针,它指向的指针是指向一个整型数(Apointertoapointertoanintege)rd)一个有10个整型数的数组(Anarrayof10integers)e)一个有10个指针的数组,该指针是指向一个整型数的。(Anarrayof10pointerstointegers)f)一个指向有10个整型数数组的指针(Apointertoanarrayof10integers)g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger)h)一个
3、有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(Anarrayoftenpointerstofunctionsthattakeanintegerargumentandreturnaninteger)a) int a;b) int *a;c) int *a;d) int a10;e) int *a10;f) int (*a)10;g) int (*a)(int );h) int (*a10)(int );6.关键字static的作用是什么?答:1)在函数体内,被声明为静态的变量在函数内被调用的过程中维持值不变,这个局部变量存储域发生改变,从栈到data中,所以这个值
4、不变。(static局部变量只被初始化一次,下一次依据上一次结果值; 2)在模块内被声明的静态全局变量,能被模块内部声明之后的函数调用,但不能被模块外的函数调用。这是一个本地的变量。所以声明为静态的全局变量的作用域发生改变,限制了它的使用范围。3)在模块内的声明的静态函数,可以被模块内部的其他函数调用,但不可被模块外部的函数调用。也就是这个函数被限制在声明它的模块使用。对于可在原模块外部使用的函数,应该在一个头文件中说明,要使用这些函数的模块需包含这个头文件。7关键字const有什么含意?1)使用Const关键字的地方是为了说明这个参数为常量,是不应该被修改的。2)合理使用const 可以是编
5、译器自然的保护那些不希望被修改的参数,防止被无意的代码修改。3)通过给优化器一些有用的信息,使用关键字const也许是代码更加紧凑。题:1.有以下表达式: int a=248; b=4;int const c=21;const int *d=&a; int *const e=&b;int const *f const =&a; 请问下列表达式哪些会被编译器禁止?为什么? *c=32;d=&b;*d=43;e=34;e=&a;f=0x321f; *c 这是个什么东东,禁止 *d 说了是const, 禁止 e = &a 说了是const 禁止 const *f const =&a; 禁止 下面的声
6、明都是什么意思?1)constinta;2)intconsta;3)constint*a;4)int*consta;5)intconst*aconst;1) a是一个常整数;2) a是一个常整数;3) a是一个指向常整形的指针4) a是一个指向整型的常指针;5) a是一个指向常整型的常指针;8.关键字volatile有什么含意?并给出三个不同的例子。一个定义为volatile的变量就是说它可能会意想不到的改变(改变它的情况有很多,例如操作系统,硬件,线程),这样,编译器就不会去假设这个值,也就是说,当优化器读到这个值时就会小心翼翼的去重新读取这个变量的值,而不是使用保存在寄存器中的备份。(当使
7、用到用类型修饰符声明的变量时,系统总是从它所在的内存读取,既使系统刚从这里读取过)Volatile修饰符告诉编译程序不要对该变量所参与的操作进行优化。大多数计算机拥有一系列寄存器,其存取速度比计算机主存更快。好的编译程序能进行一种被称为“冗余装入和存储的删去”(redundant load and store removal)的优化,即编译程序会在程序中寻找并删去这样两类代码:一类是可以删去的从内存装入数据的指令,因为相应的数据已经被存放在寄存器中;另一种是可以删去的将数据存入内存的指令,因为相应的数据在再次被改变之前可以一直保留在寄存器中。例如:volatile i=10;int a=i;例
8、子:1) 并行设备的硬件寄存器。存储器映射的硬件寄存器通常加volatile例如状态寄存器。以为设备寄存器会在你的程序不知道或者不介入的时候发生改变,那是因为设备寄存器可以被外设硬件修改。相反,变量中的不会变。设备寄存器的内容是易失的,或者在不注意的时候被修改。当声明指向设备寄存器的指针时一定要用volatile它会告诉编译器不要对存储在这个地址的数据进行假设,编译器在优化这个变量时应该把它看作编译时未知的。#define IOPMOD (*(Volatile unsigned *)(SYSCFG + 0x5000)2) 一个中断服务程序中修改的供其他程序检测的变量。3) 多线程应用中被几个任
9、务共享的变量。1.一个变量可以既是const 还是volatile吗?解释为什么?可以,例如状态寄存器。它首先应该是volatile 因为它可以出乎意料的修改,而且应该是const,这个寄存器程序不应该去修改。2.一个指针可以说volatile的吗?可以,例如中断服务子程序中修改一个指向buffer的指针。3.下列代码有错误吗?Int square(volatile int *ptr)Return *ptr *ptr;答:由于ptr声明为volatile类型的所以编译器可能编译完的程序是:intsquare(volatileint*ptr)inta,b;a=*ptr;b=*ptr;return
10、a*b;则得出的结果可能不是想要的结果;正确的程序这样写:longsquare(volatileint*ptr)inta;a=*ptr;returna*a;9.嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit3,第二个清除a的bit3。在以上两个操作中,要保持其它位不变。#define BIT3 (0x01 6)?(“6):(“= - EPSINON) & (x =”或“=”形式。如果写成if (x = 0.0),则判为错,得0分。试题4:为什么标准头文件都有类似以下的结构? #ifndef _INCvxWorksh#define _INCvx
11、Worksh #ifdef _cplusplusextern C #endif /*.*/ #ifdef _cplusplus#endif #endif /* _INCvxWorksh */解答:头文件中的编译宏#ifndef_INCvxWorksh#define_INCvxWorksh#endif 的作用是防止被重复引用。作为一种面向对象的语言,C+支持函数重载,而过程式语言C则不支持。函数被C+编译后在symbol库中的名字与C语言的不同。例如,假设某个函数的原型为: void foo(int x, int y);该函数被C编译器编译后在symbol库中的名字为_foo,而C+编译器则会产
12、生像_foo_int_int之类的名字。_foo_int_int这样的名字包含了函数名和函数参数数量及类型信息,C+就是考这种机制来实现函数重载的。为了实现C和C+的混合编程,C+提供了C连接交换指定符号extern C来解决名字匹配问题,函数声明前加上extern C后,则编译器就会按照C语言的方式将该函数编译为_foo,这样C语言中就可以调用C+的函数了。试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1解答:int checkCPU()union w int a;char b; c;c.a = 1;return (c.b = 1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 笔试 经典 精品 文档 资料 整理

限制150内