嵌入式C语言讲义_1.doc
上传人:sy****28 上传时间:2024-09-15 格式:DOC 页数:14 大小:87KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

嵌入式C语言讲义_1.doc

嵌入式C语言讲义_1.doc

预览

免费试读已结束,剩余 4 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

嵌入式C语言的深入了解本文并不一本详细C语言教材,只是重点分析与嵌入式相关的各种C语言要求,这些要求构成了一般C程序与嵌入式C程序开发者之间重大区别.本课程是作为嵌入式开发的前导课程来准备C语言类型修饰符.C语言支持可以见到6种类型修饰符,分别是:auto,const,register,static,volatile,extern.局部变量除非显式指明为static,否则默认为auto,所以一般不会在代码中使用类型修饰符auto.extern用于声明全局变量或全局函数,使用者要注意extern的后的语句并不能产生实际定义.Register是通知编译器,尽可能让所修饰的变量以寄存器的形式使用.在较新的编译器,优化器可以合理的分配寄存器,所以一般不会在代码中使用类型修饰符register.但是在单片机或嵌入式开发,有时强制使用register还是有实际含意.而const,static,volatile有一些特定的需求Staticstatic用于声明局域变量或局域函数,一个具有模式化编程的程序员应该多使用static,将私有数据和私有函数用static保护起来,不被外界访问.这一关键字起的作用类似于C++的private.1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3)在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。在一个大型项目里,static被广泛使用,如果一个嵌入式C程度员很少使用static,说明他至少对于数据保护的好处认识不够.ConstConst也是应该广泛的关键字,表示后面定义有可能是一个不变的常量,但是跟各种数据类型定义组合,能演变出复杂含义.Const主要有如下应用情况声明后面是一个常量如果跟指针组合,将形成复杂的组合情况作函数参数数的修饰符.表示不能修改这一参数的值.主要是指针作函数返回值,表示调用函数不能修改这一参数数的值.主要是指针Const让人感到复杂是的,他的位置可以与被修饰的数据类型互换!其它的修饰符没有这样用法.这样换一般情况下是等效的,如constintc1=5;等效于intconstc1=5;但是,我说是但是,如果数据类型是一个指针,互换一样位置表示完全不同含义,所以const这一个用法经常是面试官用来折磨嵌入式C面试者的法宝之一.参看如下定义intb=500;constint*a=&b;[1]intconst*a=&b;[2]int*consta=&b;[3]constint*consta=&b;[4]这种定义要看const的位置来确定他的用法.const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。因此,[1]和[2]的情况相同,都是指针所指向的内容为常量(const放在变量声明符的位置无关),这种情况下不允许对指针指向内容进行更改操作,如不能*a=3;[3]为指针本身是常量,而指针所指向的内容不是常量,这种情况下不能对指针本身进行更改操作,如a++是错误的;[4]为指针本身和指向的内容均为常量。Const的初始化Const在运行时不能修改值,所以只能在定义时进行初始化.作为参数和返回值的const修饰符其实,不论是参数还是返回值,道理都是一样的,参数传入时候和函数返回的时候,初始化const变量1修饰参数的const,如voidfun0(constA*a);表示a的指向内容不准修改的.2修饰返回值的const,如constA*fun2();表示a指南内容不准备修改Const的好处是•关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)•通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。•合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。Const一大副作用是,在函数调用时,你必须要把参数调成const所要求的形式才能被编译调用.有时这样花很大功夫才能做到Volatilevolatile关键字是一种类型修饰符,用它声明的类型变量表示可以被